LINQ:多个级别

时间:2011-01-04 09:06:13

标签: c# linq

想象一下,图书馆包含许多有很多页面的书籍。我有一个Library对象,它有一个HashSet书籍,有一个页面对象列表。我如何使用LINQ计算库中有多少页?

干杯

的Nik

3 个答案:

答案 0 :(得分:8)

假设您描述的类型是这样的:

class Library
{
    public HashSet<Book> Books { get; }
}

class Book
{
    public List<Page> Pages { get; }
}

您可以通过多种方式编写此类查询。

Library lib = ...;

var count1 = lib.Books.Sum(b => b.Pages.Count);
var count2 = lib.Books.Select(b => b.Pages.Count).Sum();
var count3 = lib.Books.Aggregate((sum, book) => sum + book.Pages.Count);
// etc.

当然,您可以通过多种方式制定此方法。我个人用第一种方法写它。

答案 1 :(得分:2)

var count = library.Books.SelectMany(book => book.Pages).Count();

或同等的:

var count2 = (from book in library.Books
              from page in book.Pages
              select page).Count();

答案 2 :(得分:1)

var count = library.books.Sum(x=>x.pages.Count())