我正在使用带有实体框架的动态linq库,并希望比较日期。我已经根据以下SO文章here成功地扩展了库。但是,我似乎无法做到的是让库只比较我的实体对象的DateTime属性的日期部分,就像我做的那样正常的linq表达。
我要做的是让动态linq像这样创建一个lambda:
// Compare just dates
p => p.CreatedDate.Value.Date == '2012/08/01'
而不是:
// Compares date + time
p => p.CreatedDate == '2012/08/01'
对此的任何想法都将非常感激。
答案 0 :(得分:4)
Dynamic Linq解析器支持System.DateTime
类型的所有公共成员,包括Date
属性。所以你可以做类似
DateTime comparisonDate = new DateTime(2012, 8, 1);
var query = items.Where("CreatedDate.Value.Date == @0", comparisonDate);
更新:如果您使用的是Entity Framework,则此示例将不起作用,因为它不支持将DateTime.Date
属性转换为SQL。通常,您可以使用EntityFunctions.TruncateTime()
函数来实现相同的效果,但Dynamic Linq解析器无法在不进行修改的情况下访问此函数。但是,您应该可以执行与以下类似的操作(尚未测试):
var query = items.Where("CreatedDate.Value.Year == @0.Year && CreatedDate.Value.Month == @0.Month && CreatedDate.Value.Day== @0.Day", comparisonDate);