2011-09-08 196 views
1
var companytoexclude = from c in db.Companies 
        from p in c.Projects 
        where p.ProjectEndDate == null 
        select c; 

var list = from m in db.Members.Include("Companies.Projects.Experiences") 
        where m.MemberId == id 
        select m; 

我該如何排除公司在公司排除在列表中?linq比較2列表

會員有很多公司
公司有很多項目
項目有很多經驗



K I樣解決它。 因此,我所做的只是添加在

foreach (Company c in companytoexclude) 
      { 
       list .First().Companies.Remove(c); 
      } 

所以有一個更容易顯示這個? 我想要公司名單的成員,而不僅僅是公司。

一些數據

Member 
MemberId Name 
2011  Jet 

Company 
CompanyId MemberId CompanyName 
18   2011   Company1 
29   2011   Company2 

ProjectId CompanyId ProjectName ProjectEndDate 
1   29   Project1 2008-08-01 00:00:00.000 
2   29   Project2 2009-08-01 00:00:00.000 
3   18   Project3  NULL 

現在我想它返回的一切,但公司1和項目3

回答

2

如何:

var list = from m in db.Members.Include("Companies.Projects.Experiences") 
      where m.MemberId == id 
      where !m.Companies.Intersect(companiesToExclude).Any() 
      select m; 

這隻會返回成員不包括任何您試圖排除的公司。

請注意,鑑於您指定了MemberId,我幾乎只會期待一個結果......不清楚您要做什麼。

如果你想從單件除了公司排除所有的企業,很容易:

var member = db.Members.Include("Companies.Projects.Experiences") 
       .Single(m => m.MemberId == id); 
var companies = member.Companies.Except(companiesToExclude); 

如果不是你以後,請澄清你的問題。

另請注意,您的companiesToExclude查詢可能不正確的開始。您是否嘗試排除任何項目的所有公司並且結束日期爲空?如果是這樣,你想:

var companiesToExclude = db.Companies 
          .Where(c => c.Projects 
             .Any(p => p.ProjectEndDate == null)) 
+0

其中m.Companies.Intersect(companiesToExclude)。任何()的回頭率什麼 – Prez

+0

@Prez:好吧,那麼也許你所有的成員都被排除公司...如果你能給出一些失敗的樣本數據,這將有所幫助。 –