2013-01-18 47 views
0

我正在使用LINQ to SQL。查找所有沒有任務的項目

我有一個Projects表。我也有一個任務表。任務可以有一個項目。

我想要一個查詢,可以返回沒有任何任務的項目列表。

這裏是我找到的所有任務的項目:

public static IEnumerable<Task> GetAllByProject(int? projectID) 
    { 
     KezberPMDBDataContext db = new KezberPMDBDataContext(); 
     return from p in db.Tasks 
       where p.ProjectID == projectID 
       select p; 
    } 

現在我需要找到上面的查詢返回任何內容的所有項目。

回答

3
return db.Projects.Where(p=>!p.Tasks.Any()) 

假設項目和任務之間存在FK關係,並且它是一對多的關係。 否則,讓我們從所有任務中找到項目ID,然後找到這些ID之外的項目。

var taskProjectIds = db.Tasks.Select(t=>t.ProjectId).Distinct(); 
return db.Projects.Where(p=>!taskProjectIds.Any(p.Id)) 
+0

謝謝,我不熟悉=>這是什麼? – jmasterx

+0

這隻有在Parent有一個Tasks集合的情況下才有效;即使父母任務關係是一對多關係,但情況可能並非如此。 – KeithS

+0

@Milo:=>是「lambda運算符」。它基本上將輸入列表與使用它們的簡單表達式分開,整個事物被視爲簡單的無名(匿名)方法。你讀它爲「p(一個項目)*進入*表達式'!p.Tasks.Any()'」。 – KeithS

相關問題