Linq2Sql如何在没有时间的情况下获取所有不同的日期

时间:2009-06-30 17:03:09

标签: linq-to-sql

我正在使用SQL Server 2005 express 我在表格中有一个日期时间字段,其中包含日期和时间。

我想从表中选择不同的日期而忽略时间部分。

我使用了这段代码,但是顺序依次被忽略了! (生成的sql不包含order by:)

        var dates = (from c in db.Comments
                     orderby c.Time descending
                     select c.Time.Day + "/" + c.Time.Month + "/" + c.Time.Year).Distinct();

欢迎任何关于如何做到这一点的想法。

谢谢

5 个答案:

答案 0 :(得分:4)

使用Date类型的DateTime属性。

var dates = from c in db.Comments
             group c by c.Time.Date into g
             orderby g.Key
             select g.Key;

var dates = (from c in db.Comments
            select c.Time.Date).Distinct().OrderBy(d => d);

SQL专家可以告诉您哪些更好。

答案 1 :(得分:2)

试试这个:

var comments = from c in db.Comments
               select c.Time.Day + "/" + c.Time.Month + "/" + c.Time.Year).Distinct();

comments = comments.OrderBy(c => c.Time);

答案 2 :(得分:2)

  

订单被忽略!

是的,你指示linq订购,然后是明确的。 linq中的区别是破坏排序的操作。你必须在distinct之后命令:

query = query.Distinct().OrderBy(x => x);

此外,使用字符串操作来执行日期逻辑是亵渎的。您应该使用DateTime的Date属性进行投影。

答案 3 :(得分:0)

尝试使用LinqPad,可以查看生成的SQL。玩不同的组合。

答案 4 :(得分:0)

如果您可以确定[时间]列不是NULL,我看不出这个想法的任何问题,我们“人类”更容易阅读:

 var dates = (from c in db.Comments
             orderby c.Time.Year, c.Time.Month, c.Time.Day
             select c.Time.Day + "/" + c.Time.Month + "/" + c.Time.Year).Distinct();

或按逆时间顺序排序:

 var dates = (from c in db.Comments
             orderby c.Time.Year descending, c.Time.Month descending, c.Time.Day descending
             select c.Time.Day + "/" + c.Time.Month + "/" + c.Time.Year).Distinct();