2014-11-21 94 views
2

我試圖讓每個學生都使用下面的查詢主體的數量:無法獲取計數的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

回答

1

您將無法訪問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(); 
0

您是否嘗試過這樣的:

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