LINQ to Entities在.NET Core中导致异常," Value不能为null"

时间:2017-03-07 16:09:38

标签: c# linq entity-framework-core

我目前正致力于将我们的公司框架从EF6转换为与EF Core兼容。我遇到了一个障碍。 EF"存储过程"在EF6上的这段代码中,在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 
                                ? 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时,此代码 DOES 有效。所以我的猜测是问题在于OR子句的另一侧。那就是我被困的地方。我想知道是否有人之前已经看过这个问题并且知道如何修复它?或者EF Core与EF6有何不同?我已经尝试了几种不同的修复方法,并在几个地方寻找解决方案,并且已经空了。

1 个答案:

答案 0 :(得分:4)

嗯,做了一点修修补补,发现了问题所在。

   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不喜欢三元运算符。希望这有助于其他任何可能遇到此问题的人。

相关问题