2014-08-29 51 views
0

結果我試過以下,它返回我每導師沒有得到從簡單的查詢

List<Tutor>tutorsList = tutors.ToList(); 

此外,我試圖只選擇具有特定主題的導師(導師,主題是N:N)

Subject subjectEntity = subjects.Where(s => s.Name == input).FirstOrDefault(); 
List<Tutor>tutorsList = tutors.Where(t => t.Subjects.Contains(subjectEntity)) .ToList(); 

因此,我的tutorsList是空的,即使subjectEntity是正確的(我將它打印到控制檯)。 但是,當我循環每個導師並打印主題時,有一個主題爲input的導師。

任何想法?

+1

你代碼中的'tutors'是什麼? – 2014-08-29 10:28:26

+2

和'科目'?我認爲它們是內存中的集合,而「Contains」正在做參考比較。 – Maarten 2014-08-29 10:29:46

+0

他們是Code-First使用EF4.0創建的 – njank 2014-08-29 10:49:57

回答

1

如果你也有編號的,你可以做到以下幾點:

Subject subjectEntity = subjects 
    .Where(s => s.Name == input) 
    .FirstOrDefault(); 
List<Tutor> tutorsList = tutors 
    .Where(t => t.Subjects 
     .Select(x => x.SubjectId) 
     .Contains(subjectEntity.SubjectId) 
    ) 
    .ToList(); 

如果沒有,你可以嘗試做一個單一的查詢

List<Tutor> tutorsList = tutors 
    .Where(t => t.Subjects.Any(x => x.Name == input)) 
    .ToList() 
+0

謝謝,兩者都很好。我不知道,Contains正在做參考比較。 – njank 2014-08-29 10:51:10

1

在一行內簡化,使用Any,在內部集合上工作時。

var tutorsList = tutors.Where(t => t.Subjects 
            .Any(s => s.Name == input)).ToList(); 
1

嘗試以下

Subject subjectEntity = subjects.Where(s => s.Name == input).FirstOrDefault(); 

List<Tutor>tutorsList = tutors.Where(t => t.Subjects.Any(x=>x.UniqueField==subjectEntity.UniqueField)).ToList();