C# linq查询不同日期
在下面的查询中,如何删除datetime列的de time部分以仅获取不同的日期C# linq查询不同日期,c#,linq,C#,Linq,在下面的查询中,如何删除datetime列的de time部分以仅获取不同的日期 using (var ctx = new DBConn()) { var q = ctx.Table.Select(r => r.datetimefield).Distinct(); } 假设r.datetimefield是一个DateTime,您可以使用删除时间组件: var q = ctx.Table.Select(r => r.datetimefield.Date).Distinct();
using (var ctx = new DBConn())
{
var q = ctx.Table.Select(r => r.datetimefield).Distinct();
}
假设
r.datetimefield
是一个DateTime,您可以使用删除时间组件:
var q = ctx.Table.Select(r => r.datetimefield.Date).Distinct();
您遇到了linq到sql或EF的错误(我不知道您使用的是哪一个)。直截了当的解决方案是使用
DateTime.Date
属性,但是,这在两种ORM中都不受支持,它不映射到SQL方法
您有两种解决方案:
ToList
对查询进行即时评估:
var q = ctx.Table.ToList().Select(r => r.datetimefield.Date).Distinct();
不能,至少不能使用linq to sql或EF,因为
Date
属性未映射到sql方法。Date属性通过value.Date可用,但我得到错误“指定的类型成员'Date'在linq to Entities中不受支持”是的,这就是我要暗示的。您不能在查询中使用Date
属性,因为EF没有将其映射到SQL方法。我个人认为这是一个巨大的错误。是的,如果datetimefield
是一个可为空的,则需要值。但是请注意,这会将查询推入内存,这可能需要很长时间进行大量查询。你应该仔细研究第二点,从长远来看,这会帮你省去很多麻烦。事实上,有一种方法可以做到这一点,看看这个答案:这个问题的答案是正确的,你想使用EntityFunctions.TruncateTime