LINQ加入DbFunction.AddDays与DateTime.AddDays

时间:2016-02-08 15:39:26

标签: c# entity-framework linq linq-to-sql

我有以下LINQ查询,它有一个简单的逻辑,可以在两个日期列中自行加入集合。一个表的日期与同一个表的上一个营业日期相匹配。以下是LINQ连接查询:

var count = dbContext.NAVSummaries.Join(dbContext.NAVSummaries,
                        current => new { current.Portfolio, PD = current.ValueDate },
                        //previous => new { previous.Portfolio, PD = SqlFunctions.DatePart("dw", previous.ValueDate) == 1 ? previous.ValueDate.AddDays(-3) : SqlFunctions.DatePart("dw", previous.ValueDate) == 0 ? previous.ValueDate.AddDays(-2) : previous.ValueDate.AddDays(-1) },
                        previous => new { previous.Portfolio, PD = SqlFunctions.DatePart("dw", previous.ValueDate) == 1 ? DbFunctions.AddDays(previous.ValueDate, -3) : SqlFunctions.DatePart("dw", previous.ValueDate) == 0 ? DbFunctions.AddDays(previous.ValueDate, -2) : DbFunctions.AddDays(previous.ValueDate, -1) },
                        (outer, inner) => new { outer, inner })

对于上面的语法,visual studio给出了以下错误:

  

方法的类型参数   ' System.Linq.Queryable.Join(System.Linq.IQueryable,   System.Collections.Generic.IEnumerable,   System.Linq.Expressions.Expression>中   System.Linq.Expressions.Expression>中   System.Linq.Expressions.Expression>)'   无法从使用中推断出来。尝试指定类型参数   明确。

当我交换' previous'的注释语法时innerKeySelector,代码构建但抛出运行时异常:

  

LINQ to Entities无法识别方法' System.DateTime   AddDays(双)'方法,这个方法无法翻译成一个   商店表达。

......这是可以理解的。这使我将DateTime.AddDays替换为DbFunctions.AddDays。但是,我不知道为什么Join扩展会引发编译时错误,以及它的修复方法是什么。

0 个答案:

没有答案