DbFunctions.DiffDays()导致:此函数只能从LINQ实体调用

时间:2017-03-21 17:45:17

标签: c# entity-framework linq

results1IQuerable<myObject>哪个方法可以正常运行,直到您尝试按日期过滤:

results1 = results1.Where(l => DbFunctions.DiffDays(FromDate, l.LeadDate) >= 0);

然后我收到了这个错误:

  

此功能只能从LINQ to Entities

调用

我在这里看到了其他一些让我接近答案的帖子like this one,但它只是不同,以至于我不确定如何重新制定这个过滤器所以它不会尝试在内存中执行此操作(这就是为什么我认为错误正在发生?)

修改

查询过于复杂,无法在Linq中运行。我以为这会是一样的,但也许不是吗?

var query1 = @"
    SELECT 
        // columns that match the object 'myObject'
     FROM 
         // a whole bunch of joins and left joins
     ORDER BY
         ....";
 var results1 = Context.DbContext.Database.SqlQuery<myObject>(query1).AsQueryable();

2 个答案:

答案 0 :(得分:1)

因为您正在运行原始SQL查询(即使用SqlQuery),所以结果是物化的数据集。这意味着查询已经传递到您的数据存储,并且数据作为DbRawSqlQuery<>传回。这与您通常扩展EF查询时可以构建的查询接口不同。

您可以添加到原始SQL查询或使用.Net Framework中的方法或编写自己的方法。

答案 1 :(得分:1)

您可以使用DateTime.SubtractTimeSpan.Days吗?

results1 = results1.Where(l => FromDate.Subtract(l.LeadDate).Days >= 0).ToList();