无法在lambda表达式中获取Count - NotSupportedException

时间:2014-11-21 12:56:42

标签: c# entity-framework lambda notsupportedexception

我正在尝试使用以下查询获取每个学生的科目数:

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

但我得到了一个例外

  

未处理的类型' System.NotSupportedException'发生在EntityFramework.SqlServer.dll

中      

其他信息:指定的类型成员'主题' LINQ to Entities不支持。仅支持初始化程序,实体成员和实体导航属性

2 个答案:

答案 0 :(得分:1)

您无法访问entity member界面上的非IList属性(例如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();

答案 1 :(得分:0)

你试过这个:

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