【发布时间】:2021-06-14 18:57:06
【问题描述】:
我想生成一个动态 LINQ 表达式,仅使用日期进行过滤,但我的列是数据库中的日期时间字段。因此,运算符“等于”和“不等于”不起作用,因为它在我的输入中附加了一些默认时间并尝试与数据匹配。如果有任何方法可以生成一个 LINQ 表达式,该表达式将通过排除时间来仅比较日期。
这是我的代码:
// for type conversion start
var propertyType = ((PropertyInfo)propertyName.Member).PropertyType;
var converter = TypeDescriptor.GetConverter(propertyType);
if (!converter.CanConvertFrom(typeof(string)))
throw new NotSupportedException();
var propertyValue = ReturnPropertyValue(rule, converter);
var constant = Expression.Constant(propertyValue);
var valueExpression = Expression.Convert(constant, propertyType); //{Convert(5/24/2021 12:00:00 AM, DateTime)}
// for type conversion ends
// returning the expression
return Expression.Equal(propertyName, valueExpression);
// {(Param_0.CreatedDate == Convert(5/24/2021 12:00:00 AM, DateTime))}
但在这里我需要这样的东西
{(Param_0.CreatedDate == Convert(5/24/2021 12:00:00 AM, Date))}
这将排除此时间检查并仅与日期进行比较
【问题讨论】:
-
我意识到这不是确切的问题,所以我不会把它作为答案,但一个非常常见的解决方法是扩展你的比较以包括两个条件,一个大于或等于日期的开始时间 (00:00:00) 并且小于第二天的开始时间 (00:00:00) - 如果您没有想到这种方法。
-
@LawrenceJohnson :上述解决方案将起作用,但我只想在表达式本身中添加一些条件/常量(如 StringComparison.OrdinalIgnoreCase)以避免时间检查
标签: c# .net entity-framework linq expression