日期之间的动态Linq查询

时间:2017-06-21 14:55:26

标签: c# linq

我正在尝试使用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 }");
}

如果我运行这个,我收到一个错误:

  

预期的表达

但我无法弄清楚出了什么问题。 有人曾经这样做过吗?

1 个答案:

答案 0 :(得分:2)

我无法回想起动态LINQ字符串表达式中DateTime文字的格式(显然只包括它们在你的尝试中的字符串表示是不够的),但你可以通过附加的{{{}传递参数。 1}}参数并在字符串中按位置引用它们params object[] values@0@1等:

@2

这会将return models.Where($"{propertyName} >= @0 && {propertyName} <= @1", start, end); start绑定为生成的查询中的常量值。

如果你想让它们成为参数,那么使用匿名类型(显式闭包),如下所示:

end