在下面的查询中,如何删除detime时间部分的datetime列以获得唯一的日期?linq查询不同日期
using (var ctx = new DBConn())
{
var q = ctx.Table.Select(r => r.datetimefield).Distinct();
}
在下面的查询中,如何删除detime时间部分的datetime列以获得唯一的日期?linq查询不同日期
using (var ctx = new DBConn())
{
var q = ctx.Table.Select(r => r.datetimefield).Distinct();
}
你绊倒的故障与LINQ到SQL或EF(我不知道哪一个你正在使用)。直接的解决方案是使用DateTime.Date
属性,但是,这在两个ORM中都不受支持,它不映射到SQL方法。
有两种解决方法:
查询急于评价使用ToList
:
var q = ctx.Table.ToList().Select(r => r.datetimefield.Date).Distinct();
创建一个字段只详细介绍在数据库中的日期部分。这是我通常的做法,因为您可以留在数据库中并在那里执行查询。
这个工作增加了r.datetimefield.Value.Date – user285677 2011-03-13 12:45:16
是的,如果'datetimefield'是一个'可空的
其实,有办法做到这一点,看到这个答案:http://stackoverflow.com/a/11525054/68818 – 2013-02-04 09:44:50
假设r.datetimefield
是一个DateTime,您可以使用DateTime.Date
删除时间部分:
var q = ctx.Table.Select(r => r.datetimefield.Date).Distinct();
你不能,至少不能用linq-to-sql或EF作为'Date'属性不映射到SQL方法。 – Femaref 2011-03-13 12:35:31
日期属性可通过value.date但我得到的错误“指定的类型成员'日期'不支持在LINQ to实体” – user285677 2011-03-13 12:39:27
是的,这就是我暗示。您不能在查询中使用Date属性,因为EF不会将其映射到SQL方法。我个人认为这是一个巨大的错误。 – Femaref 2011-03-13 12:40:41
这个问题有正确的答案,你想用EntityFunctions.TruncateTime http://stackoverflow.com/questions/11524853/distinct-date-with-linq – 2013-02-04 09:44:27