LINQ如何通过日期将列表拆分为多个列表

5

我有一个对象列表List<Payment>,我想通过PaymentDate将其分组为列表的列表。类似于这样:List<List<Payments>>,其中每个列表的日期相同(不包括小时)。

3个回答

12

DateTime类有一个Date属性

List<List<Payments>> result = payments 
    .GroupBy(p => p.PaymentDate.Date)
    .Select(g => g.ToList())
    .ToList();

LINQ很尴尬!调用两次.ToList()? - codingbiz
@codingbiz:是的,每个组都有一个列表。 - Tim Schmelter
4
当你需要一个列表的列表时,这是非常合理的。 - Jon Skeet
1
帮了我8年后的忙!!谢谢。 - kashif

7

你可以像其他人建议的那样使用GroupBy,或者你可以创建一个Lookup

var lookup = payments.ToLookup(payment => payment.PaymentDate.Date);

你可以遍历它(使用每个组的键作为日期),或者使用索引器获取给定日期的所有付款。我通常发现查找比使用嵌套集合(例如List<List<...>>Dictionary<..., List<...>>)更加简洁。

1
你可以使用 GroupBy() 来实现。结果将是类型为List<List<Payment>>
var result = payments.GroupBy(payment => payment.PaymentDate.Date)
                     .Select(group => group.ToList())
                     .ToList()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接