我需要帮助将此linq表达式转换为linq语句。 SampleData.Publishers和SampleData.Books是我在Linq in 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=??????
});
答案 0 :(得分:3)
这样做的简单方法是使用Reflector。分析代码时,您将看到语句,而不是表达式。
答案 1 :(得分:3)
转换它的另一个好方法是使用LinqPad。
答案 2 :(得分:2)
您可以使用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)
});
答案 3 :(得分:0)
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
});