2017-10-17 77 views
0

我有一個LINQ查詢,根據公司的倉庫描述進行分組。現在,我不得不將這個月的項目重量加起來。但是,我有另外一個字段,其中包含廢品的總重量,這個字段包含「SCRP」一詞。當我這樣做時,我得到臭名昭着的對象引用錯誤未設置爲對象錯誤的實例。我認爲這是因爲有空值或某些東西。該字段包含其他值或空值。如何求和linq上有一個where子句拉動返回空值的數據的字段?

這是我有的查詢。它運行完美,直到我嘗試添加UserSequence位:

P.s廢品百分比也不起作用,但我認爲這是因爲相同的問題。

var fistDayofPreviousMonth = DateTime.Today.AddMonths(-4); 
var testScrapQuery = from s in mapicsSession.Query<InventoryHistory>() 
        where s.PostedTimestamp > fistDayofPreviousMonth 
        orderby s.Warehouse.Description 
        group s by s.Warehouse.Description 
        into test 
        let tw = mapicsSession.Query<InventoryHistory>() 
         .Where(x => x.Warehouse.Description == test.Key) 
         .Sum(x => x.Item.Weight) 
        let sw = mapicsSession.Query<InventoryHistory>() 
         .Where(x => x.Warehouse.Description == test.Key 
            && x.UserSequence == "SCRP") 
         .Sum(x => x.Item.Weight) 
        select new 
        { 
         Warehouse = test.Key, 
         TotalWeight = tw, 
         ScrapWeight = sw 
         //ScrapPercentage = (sw/tw) * 100 
        }; 
+0

當我查詢是否實際上存在帶有SCRP的字段時,它可以工作,但是當我總結時,它會中斷。 –

+0

這是我的完整錯誤:NHibernate.Exceptions.GenericADOException:無法執行查詢[SQL:SQL不可用] ---> System.NullReferenceException:未將對象引用設置爲對象的實例。 at lambda_method(Closure,Object []) –

回答

2

您可以通過合併值修正第一個問題(現在它需要0的值,如果xx.Item爲null):

.Sum(x => x?.Item?.Weight ?? 0) 

或用附加Where

.Where(x => x != null && x.Item != null) 
.Sum(x => x.Item.Weight) 

我想這可以做你的百分比計算(防止除0):

ScrapPercentage = tw == 0 ? 100 : (sw/tw) * 100 
+0

嘗試了第一部分,但是這給了我一個錯誤:「表達式樹lambda可能不包含null合併運算符」。我無法測試,但似乎persentage計算器將工作。 –

+0

@JudithJoubert查看更新。 –

相關問題