我有以下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扩展会引发编译时错误,以及它的修复方法是什么。