使用LinQ表达式从DateTime属性获取日期

时间:2015-04-17 12:16:30

标签: c# linq linq-expressions

在我的代码中,我有以下

ParameterExpression parameter = Expression.Parameter(typeof(TSource), "x");
MemberExpression property = Expression.Property(parameter, filterDataField);

到目前为止一直运作良好。但是,如果filterDataField是TSource中的DateTime属性,我想获取日期部分。例如。 x.Created.Date

这是否可以使用LinQ表达式和linq-to-sql(EntityFramework)?

修改 代码是IQueryable的扩展方法的一部分,我创建了一个动态Where方法。它采用属性名称(filterDataField),值和比较方法(所有字符串)。

这样可以正常工作,但我希望扩展对DateTime属性的支持,并且只能使用DateTime字段的Date部分,例如x.Created。 Date

1 个答案:

答案 0 :(得分:2)

由于我假设变量filterDataField中命名的属性属于DateTime类型,您可以使用您建议的内容,调用Date的{​​{1}}属性结构体。使用它构建表达式只是在之后添加另一个属性访问表达式:

DateTime

注意最后一行,它只添加了对第一个属性的属性访问权限,实际上有点像ParameterExpression parameter = Expression.Parameter(typeof(TSource), "x"); MemberExpression property = Expression.Property(parameter, filterDataField); MemberExpression dateOnlyProperty = Expression.Property(property, "Date"); 而不是x => x.DateProperty.Date