3

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

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 不支持指定的类型成员“主题”。仅支持初始化器、实体成员和实体导航属性

4

2 回答 2

2

在查询具体化之前,您将无法访问界面entity member上的非属性(如)。IListCount

要么尽早实现:

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();
于 2014-11-21T13:27:03.707 回答
0

你有没有试过这个:

var count = context.Students.Select(x=>new { Name = x.Student.FirstName, 
    NoOfSubject = x.Subjects.SubjectId.Count}).ToList();
于 2014-11-21T13:11:05.370 回答