我正在使用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();
欢迎任何关于如何做到这一点的想法。
谢谢
答案 0 :(得分:4)
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();