[英]Linq To Objects, List<Items>, where Items consist of List<Items2>
我有List<Book>
,在哪里
public class Book
{
public string Name {get; set;}
public List<Author> Authors {get; set;}
}
public class Author
{
public string FirstName {get; set;}
public string LastName {get; set;}
}
我需要獲得<FirstName, BooksCount>
,每個作者的書數。 我了解,我需要使用 GroupBy,但獲取List<Author>
而不是<FirstName, BooksCount>
。
試試這個。 我按 FullName 而不是 FirstName 進行分組,因為我非常懷疑 FirstName 可能是唯一標識符。 FullName 更好,但仍然不能是唯一的。 如果需要,您可以將.GroupBy(a => $"{a.FirstName} {a.LastName}")
更改為.GroupBy(a => a.FirstName")
List<Book> books = new List<Book>() {
new Book { Name = "b1",
Authors = new List<Author>() {
new Author { FirstName = "a1fn", LastName = "a1ln" },
new Author { FirstName = "a2fn", LastName = "a2ln" } }
},
new Book { Name = "b2",
Authors = new List<Author>() {
new Author { FirstName = "a1fn", LastName = "a1ln" } }
}, new Book { Name = "b3",
Authors = new List<Author>() {
new Author { FirstName = "a2fn", LastName = "a2ln" } }
}, new Book { Name = "b4",
Authors = new List<Author>() {
new Author { FirstName = "a2fn", LastName = "a2ln" } }
} };
var result = books.SelectMany(b => b.Authors)
.GroupBy(a => $"{a.FirstName} {a.LastName}")
.Select(g => new { FullName = g.Key, BooksCount = g.Count() });
顯然有些書是由幾位作者寫的。
您有一系列由一個或多個作者撰寫的書籍,並且您想要一種方法將此序列轉換為包含所寫書籍的作者序列。
Book Author(s)
A author1
B author2
C author3
D author1, author3
E author2, author3
我們首先將其展平:獲取組合 [Book, Author],然后按同一作者分組:
展平后:
Book Author(s)
A author1
B author2
C author3
D author1,
D author3
E author2,
E author3
同一作者分組后:
Author Books
author1 A, D
author2 B, E
author3 C, D, E
使用 SelectMany 進行展平 使用 GroupBy 完成每個組成員具有共同值的項目組
IEnumerable<Book> books = ...
var authorsWithTheirBooks = books.SelectMany(book => book.Authors,
// parameter ResultSelector: take every [book, author] combination to make one new
(book, author) => new
{
Book = book,
Author = author,
})
// now make groups with same Author:
.GroupBy(flattenResult => flattenResult.Author,
// resultSelector: take every author, and the books of this author to make one new
(author, booksOfThisAuthor => new
{
Author = author,
Books = booksOfThisAuthor.ToList(),
});
好吧,你不想要這個作者的所有書,你只想要書的數量:
(author, booksOfThisAuthor => new
{
Author = author,
Books = booksOfThisAuthor.Count(),
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.