如何将 linq 查询转换为 ToList() 以使用扩展属性
How to convert a linq query to ToList() to use extended properties
private IQueryable<SubjectDataViewModel> GetData()
{
var subject = this.DbContext.Subjects.AsQueryable(); //sql view
var data =
from subject in subjects
let treatment = this.DbContext.TreatmentFactor.FirstOrDefault(x => x.TreatmentFactorId == subject.ActiveTreatmentFactor)
select new SubjectDataViewModel
{
Name = subject.Name,
Gender = subject.Gender,
Version = subject.Version.IsEnumToValueDisplay() // extented method which displays enum DisplayName property into string
};
return data.AsQueryable();
}
这是我根据上面的查询填充到的视图模型。
public class SubjectDataViewModel
{
public string Name {get;set;}
public string Gender {get;set;}
public string Version {get;set;} // string type return
}
这是主题Sql视图
public class Subjects
{
public string Name {get;set;}
public string Gender {get;set;}
public Version Version {get;set;} // enum return type
}
用于版本的枚举。需要在 linq 查询中使用 ToEnumDiplayValue() 扩展方法来提取 Diplay 名称,即 Original 而不是数据库值,即 0 和 1,这将显示第一个或第二个。
public enum Version
{
[Display(Name = "Original")]
first= 0,
[Display(Name = "Not Original")]
second = 1,
}
所以我想获取版本的显示名称,这可以通过使用我们自己的扩展方法来完成,该方法使用反射从枚举中获取显示名称。
但是我不能在内存对象中使用它。它必须转换为 .ToList() for。
这就是我想要的。我希望我很清楚。感谢您的时间 。
截至目前,我的代码将抛出错误消息,因为我无法在 Linq 中使用扩展 属性。
尝试
private IQueryable<SubjectDataViewModel> GetData()
{
var subject = this.DbContext.Subjects.AsQueryable(); //sql view
var data =
from subject in subjects
let treatment = this.DbContext.TreatmentFactor.FirstOrDefault(x => x.TreatmentFactorId == subject.ActiveTreatmentFactor)
select new SubjectDataViewModel
{
Name = subject.Name,
Gender = subject.Gender,
VersionEnum = subject.Version // Version Enum
};
return data.AsQueryable();
}
使用下面的代码将 GetData() 转换为列表,然后使用 IsEnumToValueDisplay() 方法。
var list = GetData().ToList();
foreach (var item in list)
{
item.Version = item.VersionEnum.IsEnumToValueDisplay(); // Get value from Version Enum
}
更改模型 SubjectDataViewModel
public class SubjectDataViewModel
{
public string Name {get;set;}
public string Gender {get;set;}
public Version VersionEnum {get;set;}
public string Version {get;set;}
}
private IQueryable<SubjectDataViewModel> GetData()
{
var subject = this.DbContext.Subjects.AsQueryable(); //sql view
var data =
from subject in subjects
let treatment = this.DbContext.TreatmentFactor.FirstOrDefault(x => x.TreatmentFactorId == subject.ActiveTreatmentFactor)
select new SubjectDataViewModel
{
Name = subject.Name,
Gender = subject.Gender,
Version = subject.Version.IsEnumToValueDisplay() // extented method which displays enum DisplayName property into string
};
return data.AsQueryable();
}
这是我根据上面的查询填充到的视图模型。
public class SubjectDataViewModel
{
public string Name {get;set;}
public string Gender {get;set;}
public string Version {get;set;} // string type return
}
这是主题Sql视图
public class Subjects
{
public string Name {get;set;}
public string Gender {get;set;}
public Version Version {get;set;} // enum return type
}
用于版本的枚举。需要在 linq 查询中使用 ToEnumDiplayValue() 扩展方法来提取 Diplay 名称,即 Original 而不是数据库值,即 0 和 1,这将显示第一个或第二个。
public enum Version
{
[Display(Name = "Original")]
first= 0,
[Display(Name = "Not Original")]
second = 1,
}
所以我想获取版本的显示名称,这可以通过使用我们自己的扩展方法来完成,该方法使用反射从枚举中获取显示名称。 但是我不能在内存对象中使用它。它必须转换为 .ToList() for。 这就是我想要的。我希望我很清楚。感谢您的时间 。 截至目前,我的代码将抛出错误消息,因为我无法在 Linq 中使用扩展 属性。
尝试
private IQueryable<SubjectDataViewModel> GetData()
{
var subject = this.DbContext.Subjects.AsQueryable(); //sql view
var data =
from subject in subjects
let treatment = this.DbContext.TreatmentFactor.FirstOrDefault(x => x.TreatmentFactorId == subject.ActiveTreatmentFactor)
select new SubjectDataViewModel
{
Name = subject.Name,
Gender = subject.Gender,
VersionEnum = subject.Version // Version Enum
};
return data.AsQueryable();
}
使用下面的代码将 GetData() 转换为列表,然后使用 IsEnumToValueDisplay() 方法。
var list = GetData().ToList();
foreach (var item in list)
{
item.Version = item.VersionEnum.IsEnumToValueDisplay(); // Get value from Version Enum
}
更改模型 SubjectDataViewModel
public class SubjectDataViewModel
{
public string Name {get;set;}
public string Gender {get;set;}
public Version VersionEnum {get;set;}
public string Version {get;set;}
}