2012-03-16 88 views
2

加入我試圖找出如何引入多個字段匹配到這一點。現在我正在基於與公司表匹配的UserId進行連接。但是,如果我想什麼也有,並在那裏如c.SomeField = somevalue多個字段,通過Lambda表達式

var companyUsers = users.Where(u => u.IsEmployee) 
         .Join(companies, 
           u => u.UserId, c => c.UserId, 
           (u, c) => u.UserId) 
         .ToList(); 
+0

這是一個更容易閱讀的代碼,如果你沒有滾動兩側,才能看到這一切......如果你垂直堆疊他們LINQ查詢一般工作非常漂亮 - 看到我的回答爲例... – 2012-03-16 20:18:44

回答

3

你需要加入對匿名類型:

as.Join(bs, a => new { a.X, a.Y }, b => new { b.X, b.Y }) 
+0

是加工?? – 2015-01-21 05:04:42

+0

工作嗎?我試了一下,但不能 – 2015-01-21 05:26:00

+0

@JohnNguyen:爲什麼不呢?發生了什麼? – SLaks 2015-01-21 14:50:27

3

如果somevalue是一個常數(即無關的用戶),那麼你應該只是過濾companies第一:

var companyUsers = users.Where(u => u.IsEmployee) 
         .Join(companies.Where(c => c.SomeField == someValue), 
           u => u.UserId, c => c.UserId, (u, c) => u.UserId) 
         .ToList(); 

如果你需要加入的用戶的兩個領域,以公司的兩個領域,使用匿名類型如圖SLaks。

+0

感謝,我不覺得LINQ是那麼容易的時候。仍然試圖讓它流利。 – PositiveGuy 2012-03-16 20:27:06