4

我有以下方法,我计划返回一堆不同的日期时间对象。不同的我是指独特的日子(不包括时间)。

问题是, DateTime 对象有不同的时间,因此即使它们是同一天,它们也被评估为唯一的。

如何让查询忽略日期的时间部分并仅评估日期的唯一性?

    public List<DateTime> DistinctNoticeDates()
    {
        return (from notices in this.GetTable<Notice>()
                orderby notices.Notice_DatePlanned descending
                select notices.Notice_DatePlanned).Distinct().ToList();
    }

谢谢。

4

5 回答 5

5

尝试使用该Date属性来获取DateTime结构的日期:

public List<DateTime> DistinctNoticeDates()
{
    return (from notices in this.GetTable<Notice>()
            orderby notices.Notice_DatePlanned descending
            select notices.Notice_DatePlanned.Date)
            .Distinct()
            .ToList();
}
于 2013-09-18T15:03:37.983 回答
1

更改您的查询以将 dateTime 转换为 Date 部分

public List<DateTime> DistinctNoticeDates()
    {
        return (from notices in this.GetTable<Notice>()
                orderby notices.Notice_DatePlanned descending
                select notices.Notice_DatePlanned.Date).Distinct().ToList();
    }

此外,如果您只想按日期部分订购它们,我会在不同之后订购它们。这样,您将订购一个较小的列表,从而提高性能

public List<DateTime> DistinctNoticeDates()
    {
        return (from notices in this.GetTable<Notice>()                    
                select notices.Notice_DatePlanned.Date).Distinct().OrderByDescending().ToList();
    }
于 2013-09-18T15:07:03.640 回答
1
public List<DateTime> DistinctNoticeDates()
{
    return (from notices in this.GetTable<Notice>()
            orderby notices.Notice_DatePlanned descending
            select notices.Notice_DatePlanned.Date).Distinct().ToList();
}
于 2013-09-18T15:03:42.160 回答
1

您可以使用该Date属性去除以下时间部分DateTime

public List<DateTime> DistinctNoticeDates()
{
    return 
        (from notices in this.GetTable<Notice>()
         orderby notices.Notice_DatePlanned descending
         select notices.Notice_DatePlanned.Date)
        .Distinct()
        .ToList();
}
于 2013-09-18T15:04:05.053 回答
-1

尝试实现DateTime比较器,它将仅按天比较日期(如果天数相等,则返回 true)并将其用作 linqDistinct方法的参数。例如:

class DateTimeByDayComparer : IEqualityComparer<DateTime>
{
       public bool Equals(DateTime x, DateTime y)
       {
           return x.Day == y.Day;
       }
}

public List<DateTime> DistinctNoticeDates()
{
     var comparer = new DateTimeByDayComparer();
     return this.GetTable<Notice>().OrderByDescending(n => n.Notice_DatePlanned).Distinct(comparer).ToList();
}
于 2013-09-18T15:26:17.423 回答