Linq to sql Linq2Sql如何获得所有不同的日期而不使用时间部分

Linq to sql Linq2Sql如何获得所有不同的日期而不使用时间部分,linq-to-sql,Linq To Sql,我正在使用SQLServer2005Express 我在包含日期和时间的表中有一个datetime字段 我想从表中选择不同的日期,忽略时间部分 我使用了此代码,但忽略了order by!(生成的sql不包含order by): 任何关于如何做到这一点的想法都是欢迎的 感谢您尝试,它可以让您查看生成的SQL。玩不同的组合。试试这个: var comments = from c in db.Comments select c.Time.Day + "/" + c.Tim

我正在使用SQLServer2005Express 我在包含日期和时间的表中有一个datetime字段

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

我使用了此代码,但忽略了order by!(生成的sql不包含order by):

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

感谢您尝试,它可以让您查看生成的SQL。玩不同的组合。

试试这个:

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

comments = comments.OrderBy(c => c.Time);
使用类型的属性

SQL专家可以告诉您哪一个更好

订单被忽略

是的,你是在指示linq先下订单,然后下订单。linq中的Distinct是一种破坏顺序的操作。您必须在以下内容之后添加orderby:

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

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

如果您能确保[Time]列不会为空,我看不出这个想法有任何问题,我们“人类”更容易阅读:

或按逆时间顺序排序:

 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();
var dates = (from c in db.Comments
            select c.Time.Date).Distinct().OrderBy(d => d);
query = query.Distinct().OrderBy(x => x);
 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();