2014-01-29 64 views
2

我有以下連接:翻譯從LINQ查詢語法方法的語法

var simpleJoin = from b in books 
       join p in publishers on b.PublisherName equals p.Name 
       where p.Id == 1 
       select b; 

使用方法的語法有什麼相同呢?

simpleJoin = books.Join(publishers, p => p.PublisherName, b => b.Name, (b, p) => b).Where(*can't access publishers here*) 

我不能用books作爲我的源集合:我越來越被過濾器絆倒了?我想知道如果我們有多個連接,我們如何管理過濾。

回答

2

你需要包括在resultSelectorbp。例如,使用匿名類型的對象:

simpleJoin = books.Join(publishers, p => p.PublisherName, b => b.Name, 
     (b, p) => new { b = b, p = p }) 
    .Where(result => result.p.Id == 1) 
    .Select(result => result.b); 
0

正如例子 - 你也可以讓它不加入條款:

books.Where(b => publishers.Exists(p => p.Name == b.PublisherName && p.Id == 1)); 
2

您可以將publishers列表其連接到books之前篩選:

var simpleJoin = books.Join(publishers.Where(p => p.Id == 1), 
          b => b.PublisherName, p => p.Name, (b, p) => b);