GroupBy 似乎不是按日期时间分组,而只是按日期分组

时间:2021-01-20 22:31:26

标签: c#

我有以下几点:

var items = new List<CustomItem> 
{
    new CustomItem()
    {
        Id = 90, // int
        ParentId = 10, // int
        CreateDate = '1/19/2020 1:04 PM' // DateTime
    },
    new CustomItem() 
    {
        Id = 91,
        ParentId = 10,
        CreateDate = '1/19/2020 1:04 PM'
    },
    new CustomItem()
    {
        Id = 92,
        ParentId = 10,
        CreateDate = '1/19/2020 2:32 PM'
    }
};

现在我想做的是GroupBy CreateDate 然后OrderBy 并选择每个组中的第一个。

所以,我有以下代码,我希望只有 ID 为 90 和 91 的项目,但我得到了所有三个。就好像 GroupBy 只按日期分组,而不是按时间分组。这是它的工作原理还是我遗漏了什么?

当前代码:

var newItems = items.Where(item => item.ParentId == 10).GroupBy(item => item.CreateDate).Select(grp => grp.OrderBy(x => x.CreateDate).First())

1 个答案:

答案 0 :(得分:1)

可以有多个不同的 DateTime 值,其字符串表示(在某些文化中)是 "1/19/2020 1:04 PM"DateTime 的精度为 100 纳秒。如果两个 DateTime 相差 1 微秒,则它们可能看起来与您相同,但最终仍会归入不同的组(因为它们不完全相等)。

此外,根据您的描述,您似乎想对组进行排序,而不是对每个组的成员进行排序,因此:

items.Where(item => item.ParentId == 10)
  .GroupBy(item => item.CreateDate)
  .OrderBy(grp => grp.Key)
  .First()