如何将 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;} 
}