2014-01-29 3 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

Вам необходимо включить оба б и р в resultSelector. Например, используя анонимный типизированный объект:

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); 
Смежные вопросы