我正在尝试使用Dynamic Linq Query创建一个比较两个日期之间字段的函数。 该函数如下所示:
public static IQueryable<T> BetweenDates<T>(this IQueryable<T> models, DateTime startDate, DateTime endDate, string propertyName)
{
var start = new DateTime(startDate.Year, startDate.Month, startDate.Day, 0, 0, 1); // Set to 1 second past midnight
var end = new DateTime(endDate.Year, endDate.Month, endDate.Day, 0, 0, 0); // Set to midnight
return models.Where($"{ propertyName } => { start } && { propertyName } <= { end }");
}
如果我运行这个,我收到一个错误:
预期的表达
但我无法弄清楚出了什么问题。 有人曾经这样做过吗?
答案 0 :(得分:2)
我无法回想起动态LINQ字符串表达式中DateTime
文字的格式(显然只包括它们在你的尝试中的字符串表示是不够的),但你可以通过附加的{{{}传递参数。 1}}参数并在字符串中按位置引用它们params object[] values
,@0
,@1
等:
@2
这会将return models.Where($"{propertyName} >= @0 && {propertyName} <= @1", start, end);
和start
绑定为生成的查询中的常量值。
如果你想让它们成为参数,那么使用匿名类型(显式闭包),如下所示:
end