2011-10-17 94 views
1

我有3個MySql表格:Students,ClassesStudentsInClassesLINQ to Entities選擇多對多關係中的所有條目

實體框架將其轉換爲兩個實體StudentClass,每個實體通過多對多導航屬性(例如Student.Classes)鏈接到另一個實體。

但沒有StudentsInClasses實體,所以什麼叫最好的方式,使用LINQ到實體,SQL相當於:我正在尋找的一個HashSet(或同等學歷)

SELECT StudentId, ClassId FROM StudentsInClasses; 

{StudentId,ClassId}對,這樣我就可以快速查找給定的學生是否在給定的班級中。 (什麼是存儲這種最好的方式?)

非常感謝。

回答

3

如何:

var query = from @class in db.Classes 
      from student in @class.Students 
      select new { ClassId = @class.ID, Student = student }; 

var lookup = query.ToLookup(x => x.ClassId, 
          x => x.Student); 

(我懷疑LookupHashSet更合適的位置。)

編輯:如果你不想使用查詢表達式:

var query = db.Classes 
       .SelectMany(@class => @class.Students, 
          (@class, student) => new { ClassId = @class.ID, 
                Student = student }); 
+0

謝謝!出於興趣,我將如何使用'db.Classes.Select(...)'表單編寫該表單? – James

+0

@James:你會使用'SelectMany'來代替。將編輯... –

+0

乾杯。然後是最有效的檢查'lookup [someKey] .Contains(someValue)'? – James