EF不在子句之间生成

时间:2017-02-08 12:22:10

标签: c# entity-framework

条款Where(i => i.TimeSt >= date1 && i.TimeSt =< date2)未转换为where TimeSt between @date1 and @date2。如何告诉EF使用它?

EDIT1
这是查询的简化版本。原来的一个处理超过17个日期。

EDIT2
date1date2是具有重要日期部分和时间部分的标准.Net DateTime对象(例如:2017-01-05 21:15:21.123)

1 个答案:

答案 0 :(得分:1)

简单的答案是你不能开箱即用。 EF7中有一些神奇的东西可以让你把这部分查询交给泰勒(但是正如其他人所说的那样看起来有些过分),请查看他们的测试以获得一个例子

from o in context.Set<Order>().FromSql(@"SELECT * FROM ""Orders"" WHERE ""OrderDate"" BETWEEN {0} AND {1}", startDate, endDate)
where c.CustomerID == o.CustomerID
....

https://github.com/aspnet/EntityFramework/blob/1fa247b038927a7d7438f666dc11253f64e0432d/src/Microsoft.EntityFrameworkCore.Relational.Specification.Tests/AsyncFromSqlQueryTestBase.cs#L98

也许更好的解决方案是在扩展方法之间编写自己的方法,该方法自动交换args的顺序,或者只是在查询之前执行

或者如果您希望它自动交换它们,请将两个订单放在查询(i => (i.TimeSt >= date1 && i.TimeSt =< date2) || (i.TimeSt >= date2 && i.TimeSt =< date1))