LINQ to Entities在.NET Core中導致異常,“值不能為空”

c# entity-framework-core linq

我正在努力嘗試將我們的公司框架從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核心解決方案,當輸入參數此代碼工作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不喜歡三元運算符。希望這有助於其他可能遇到此問題的人。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow