使用Linq to Entities,我试图查询Log表以查找匹配行附近的行.我在查询中添加日期时遇到问题.这就是我到目前为止所拥有的.
from
l in objectSet.Logs
let
match = objectSet.Logs.Where(whatever).FirstOrDefault()
where
l.Timestamp > (match.Timestamp - twoHours)
&& l.Timestamp < (match.Timestamp + twoHours)
select
l
Run Code Online (Sandbox Code Playgroud)
离开找到我感兴趣的行的"无论"条件,"twoHours"可变地是时间跨度,.AddHours()功能等等.我没有找到EF生成SQL的正确方法,该方法将字段(match.Timestamp)的值添加到常量.
显而易见的解决方案是首先执行"匹配"查询,然后在第二个查询中使用文字值,但我已将此处的代码示例简化为主要问题(在查询中添加日期),实际上我的查询更多复杂,这不是理想的.
干杯
Cra*_*ntz 11
您可以AddHours使用EntityFunctions 该类生成一个.
from
l in objectSet.Logs
let
match = objectSet.Logs.Where(whatever).FirstOrDefault()
where
(l.Timestamp > EntityFunctions.AddHours(match.Timestamp, -1 * twoHours))
&& // ...
select
l
Run Code Online (Sandbox Code Playgroud)
但是,WHERE除非列上有表达式索引,否则不要指望使用索引对其进行优化.
EntityFunctions已被弃用,有利于DbFunctions
public int GetNumUsersByDay(DateTime Date)
{
using (var context = db)
{
var DateDay = new DateTime(Date.Year, Date.Month, Date.Day);
var DateDayTomorrow = DateDay.AddDays(1);
return context.Users.Where(m => DbFunctions.AddHours(m.DateCreated,-5) >= DateDay && m.DateCreated < DateDayTomorrow).Count();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3505 次 |
| 最近记录: |