C# LINQ Join DbFunction.AddDays与DateTime.AddDays的比较
我有下面的LINQ查询,它有一个简单的逻辑,可以在两个日期列上自连接集合。一张表的日期与同一张表的上一个业务日期匹配。以下是LINQ连接查询:C# LINQ Join DbFunction.AddDays与DateTime.AddDays的比较,c#,entity-framework,linq,linq-to-sql,C#,Entity Framework,Linq,Linq To Sql,我有下面的LINQ查询,它有一个简单的逻辑,可以在两个日期列上自连接集合。一张表的日期与同一张表的上一个业务日期匹配。以下是LINQ连接查询: var count = dbContext.NAVSummaries.Join(dbContext.NAVSummaries, current => new { current.Portfolio, PD = current.ValueDate }, /
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实体无法识别方法“System.DateTime”
AddDays(Double)'方法,此方法无法转换为
存储表达式
…这是可以理解的。这使我将DateTime.AddDays替换为DbFunctions.AddDays。但是,我不知道为什么会为联接扩展抛出编译时错误,以及它的修复方法是什么。
DbFunctions.AddDays
返回一个null
,而我假设ValueDate
是一个不可为null的DateTime
。因此,join子句中的数据类型不匹配。这在@DStanley中有效。谢谢,请按回答做标记。