6

我正在使用带有实体框架的动态 linq 库并想比较日期。我已经成功地根据下面的 SO 文章扩展了库但是我似乎无法让库只比较我的实体对象的 DateTime 属性的日期部分,就像我对普通 linq 表达式所做的那样。

我想要做的是让动态 linq 创建一个像这样的 lambda:

// Compare just dates
p => p.CreatedDate.Value.Date == '2012/08/01'

而不是:

// Compares date + time
p => p.CreatedDate == '2012/08/01'

对此的任何想法将不胜感激。

4

1 回答 1

4

Dynamic Linq 解析器支持该类型的所有公共成员System.DateTime,包括Date属性。所以你可以做类似的事情

DateTime comparisonDate = new DateTime(2012, 8, 1);
var query = items.Where("CreatedDate.Value.Date == @0", comparisonDate);

更新:如果您使用的是实体框架,此示例将不起作用,因为它不支持将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);
于 2012-08-28T21:26:33.473 回答