无法获取计数的lambda表达式 - NotSupportedException异常

问题描述:

我试图让每个学生都使用下面的查询主体的数量:无法获取计数的lambda表达式 - NotSupportedException异常

var selectedSubject = context.Students 
          .Include(d => d.Subjects) 
          .Select(dr => new 
              { 
               Name = dr.Student.FirstName, 
               NoOfSubject = dr.Subjects.Count 
              }) 
          .ToList(); 

但我得到一个异常

未处理在EntityFramework.SqlServer.dll中发生类型'System.NotSupportedException'异常

附加信息:LINQ to Entities中不支持指定的类型成员'主题'。只有初始化,实体成员和实体导航属性都支持

+0

你可以添加你的学生的相关部分和主题模式? – 2014-11-21 13:01:42

+0

我们需要看你的模型定义。英孚正在告诉你,“主题”不是可查询的。 – 2014-11-21 13:11:12

您将无法访问IList接口上非entity member属性(如Count),直到该查询是物化的。

要么兑现年初:

var selectedSubject = context.Students 
         .Include(d => d.Subjects) 
         // .Where() goes here, 
         .ToList() 
         .Select(dr => new 
             { 
              Name = dr.Student.FirstName, 
              NoOfSubject = dr.Subjects.Count 
             }) 
         .ToList(); 

或者,利用Count()方法,这将可映射到SQL:

var selectedSubject = context.Students 
         .Include(d => d.Subjects) 
         .Select(dr => new 
             { 
              Name = dr.Student.FirstName, 
              NoOfSubject = dr.Subjects.Count() 
             }) 
         .ToList(); 

您是否尝试过这样的:

var count = context.Students.Select(x=>new { Name = x.Student.FirstName, 
    NoOfSubject = x.Subjects.SubjectId.Count}).ToList();