我有一个这样的任务:写一个LINQ表达式,显示在上个世纪的每十年里印刷了多少本书。答案应该是一个具有属性的对象序列:d-十年数(1,2,. 10),C-图书数。你也不能用时间,因为,你不能用。
有一门课
class Book {
public string Title { set; get; }
public int Year { set; get; } }还有一堆书-- books
一开始我是这样做的:
var g = books.GroupBy(b => b.Year % 100 == 0 ? (b.Year == 1900 ? 1 : 10) : (b.Year % 100 - 1) / 10 + 1,
b => b.Year,
(decade, years) => new
{
D = decade,
C = years.Count()
});但这只是为现有的几十年从集合创建组,然后我意识到必须有10个组的D值为1到10。我尝试这样做,但没有循环,它对我不起作用。你能告诉我如何在团购中实现这一点吗?因为任务与linq的介绍有关,但我无法正确地理解它。
抱歉英语不太好
发布于 2021-06-01 13:24:15
那么,我们可以创建所有的10十年(确保每一个十年都存在于答案中,即使其中没有印刷书籍)
Enumerable.Range(0, 10)然后Count里面的书。因此,给定一个集合,枚举books
IEnumerable<Book> books = ...
var result = Enumerable
.Range(0, 10)
.Select(D => new {
D = D + 1,
C = books.Count(book => book.Year >= 1900 + D * 10 &&
book.Year < 1900 + (D + 1) * 10)
});https://stackoverflow.com/questions/67789131
复制相似问题