Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ Join DbFunction.AddDays与DateTime.AddDays的比较_C#_Entity Framework_Linq_Linq To Sql - Fatal编程技术网

C# LINQ Join DbFunction.AddDays与DateTime.AddDays的比较

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 }, /

我有下面的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实体无法识别方法“System.DateTime” AddDays(Double)'方法,此方法无法转换为 存储表达式


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

DbFunctions.AddDays
返回一个
null
,而我假设
ValueDate
是一个不可为null的
DateTime
。因此,join子句中的数据类型不匹配。这在@DStanley中有效。谢谢,请按回答做标记。