【问题标题】:LINQ Groupby a Date in a List of ObjectLINQ Groupby 对象列表中的日期
【发布时间】:2011-12-14 12:28:16
【问题描述】:

我有以下对象的列表:

public  class Item
{
    public DateTime DliveryDate { get; set; }
    public String Order { get; set; }
}

如何使用 LINQ 按日期对 List<Item> 进行分组?

我使用了以下查询,但在按日期分组时没有得到例外结果得到一个垃圾日期为 0001/1/1 的 List 对象

var r = from i in Items
        group i by i.DliveryDate into s
        select s;

【问题讨论】:

  • 这里的Date 类型是什么?特别是,它是否覆盖EqualsGetHashCode(或实现IEquatable<Date>)?另外,请向我们提供您在尝试时看到的详细信息,而不仅仅是“没有得到任何好的结果”。阅读tinyurl.com/so-hints 以获取有关提出好问题的提示。
  • @JonSkeet 感谢您的评论,我已经更新了问题
  • 您已对其进行了更新,以提供 一些 更多信息,但没有提供 足够 信息,也没有任何迹象表明您的日期开始时有效。 ..(哦,DliveryDate 是什么?你只显示了ChangeDateTime。)
  • @Sudentha,您确定您的 DliveryDate 已正确初始化吗? “0001/1/1”似乎是日期时间的默认值。
  • @Sudantha:请展示一个简短但完整的示例来说明问题。请注意,您仍然在 cmets 中谈论 ChangeDateTime,尽管这不再是问题...

标签: c# linq group-by


【解决方案1】:

这应该返回你需要的:

var listdategroup = from x in psrAlertLogItems.AsEnumerable<Item>()
                    group x by x.DliveryDate.Date into s
                    select s;

【讨论】:

  • Key = {1/1/0001 12:00:00 AM} 我得到了这样的值
【解决方案2】:

也许你的 ChangeDateTime 包含小时/时间信息,你应该这样做

var listdategroup = from i in psrAlertLogItems
group i by i.DliveryDate.Date into s select s;

仅获取日期时间的日期部分

【讨论】:

  • DateTime 类中找不到Dateinto
  • @Sudantha,remi 少了一个空格。立即尝试。
  • 与@Kev IM 的结果相同,确保我的数据正确,但使用 `Key = {1/1/0001 12:00:00 AM} 获得查询结果
  • @Sudentha a group by 子句不要创建/更改数据,您的对象一定有问题。你如何检查你的结果?你如何初始化你的列表?
【解决方案3】:

也许这对你有帮助..

var sorted_lists = from sort in lists
               group sort by sort.DateInfo into sorted
               select sorted;

我得到了正确的结果..

【讨论】:

    【解决方案4】:

    你用扩展方法试过了吗

     var itemsGruopedByDate = Items.GroupBy(item => item.DliveryDate ).ToList();
    

    只是一种选择。

    希望对你有用。

    干杯。

    【讨论】:

      猜你喜欢
      • 2021-10-10
      • 1970-01-01
      • 1970-01-01
      • 2015-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-29
      • 1970-01-01
      相关资源
      最近更新 更多