Мне нужна помощь в преобразовании этого выражения linq в элемент linq. SampleData.Publishers и SampleData.Books - это простые коллекции, которые я имею в книге Linq в Action.
Вот выражение
var pubBooks =
from pub in SampleData.Publishers
join book in SampleData.Books on pub.Name equals book.Publisher.Name into pubbks
select new {
Publisher = pub.Name,
Books =
from b in pubbks
select b.Title
};
Вот что я до сих пор, но, похоже, я не могу получить коллекцию книг, определенную в анонимном типе. Спасибо за ваше время.
var pubBooks = SampleData.Publishers.Join(SampleData.Books, pub => pub.Name, book => book.Publisher.Name, (pub, book) => new {
Publisher=pub.Name,
Books=??????
});
Resharper дал мне следующее:
var pubBooks =
SampleData.Publishers.GroupJoin(
SampleData.Books,
pub => pub.Name,
book => book.Publisher.Name,
(pub, pubbks) => new
{
Publisher = pub.Name,
Books =
from b in pubbks
select b.Title
});
Другим хорошим способом преобразования этого является использование LinqPad.
Действительно простой способ сделать это - использовать Reflector. Когда вы анализируете свой код, вы увидите оператор, а не выражение.
Вы можете использовать GroupJoin
.
Я не тестировал это, но это могло бы выглядеть так:
var pubBooks = SampleData.Publishers.GroupJoin(SampleData.Books, pub => pub.Name, book => book.Publisher.Name, (pub, bookColl) => new {
Publisher = pub.Name,
Books = bookColl.Select(b => b.Title)
});