c# - LINQ to Entities 在 .NET Core 中导致异常, "Value cannot be null"

标签 c# linq entity-framework-core

我目前正在尝试将我们公司的框架从 EF6 转换为与 EF Core 兼容。我遇到了一些障碍。在 EF6 上运行良好的 EF“存储过程”现在在 EF Core 中的这段代码上失败:

var allFolderAncestors = (from f in context.MENU_MenuFolders
                          from mtf in context.MENU_MenuToolbar_MenuFolders
                                             .Where(x => x.MenuFolderId == f.Id 
                                                      || x.MenuFolderId == f.ParentFolderId)
                                             .DefaultIfEmpty()
                          where (toolbarId == -1 
                          || (mtf == null 
                                ? false 
                                : mtf.MenuToolbarId == toolbarId)
                          ) 
                          && f.Id != 0
                          select new
                          {
                              AncestorFolderId = f.Id,
                              AncestorParentFolderId = f.ParentFolderId,
                              Id = f.Id,
                              ParentFolderId = f.ParentFolderId
                          }).ToList();

尝试执行这行代码会导致以下异常消息:

Value cannot be null. Parameter name: left

在我们的 .NET Core 解决方案中,当输入参数 toolbarId 设置为 -1 时,此代码确实有效。所以我的猜测是问题出在 OR 子句另一边的某个地方。这就是我被困的地方。我想知道是否有人以前见过这个问题并且知道如何解决?或者 EF Core 与 EF6 有何不同?我尝试了几种不同的修复方法,并在多个地方寻找解决方案,但都没有找到。

最佳答案

好吧,对它做了更多的修补,发现了问题所在。

   var allFolderAncestors = (from f in context.MENU_MenuFolders
                             from mtf in context.MENU_MenuToolbar_MenuFolders
                                                .Where(x => x.MenuFolderId == f.Id 
                                                     || x.MenuFolderId == f.ParentFolderId)
                                                .DefaultIfEmpty()
                             where (toolbarId == -1 
                             || (mtf != null && mtf.MenuToolbarId == toolbarId)) 
                             && f.Id != 0
                             select new
                             {
                                 AncestorFolderId = f.Id,
                                 AncestorParentFolderId = f.ParentFolderId,
                                 Id = f.Id,
                                 ParentFolderId = f.ParentFolderId
                             }).ToList();

在 OR 之后的 where 子句中,.NET Core 显然不喜欢三元运算符。希望这对可能遇到此问题的任何其他人有所帮助。

关于c# - LINQ to Entities 在 .NET Core 中导致异常, "Value cannot be null",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42653007/

相关文章:

c# - 使用 NEST C# 的 ElasticSearch 2.x GeoPoint 映射

c# - 来自事件处理程序的 "yield return"

c# - 报告超过 256 列

c# - 为什么这个 defaultIfEmpty 选择 ienumerable<char> 而不是字符串?

c# - 运行时的 Linq To XSD

c# - 如何编写 Linq 表达式以在一组实体上调用 OrderBy?

c# - 如何更改双数组中的项目?

azure-devops - 如何使用 Azure Devops 管道将代码优先的 Entity Framework 数据库部署到 SQL 服务器

c# - 无法将 Entity Framework Core 加载到 C# azure 函数中

.net - 使用 EF core 更新 JSON 属性的最佳方法