2017-10-17 5 views
0

私は会社の倉庫の説明でLINQクエリ、基を有しています。さて、今月のアイテムの重量を合計しなければならなかった。しかし、私は「SCRP」という言葉を含むフィールドによって見つけられるスクラップの総重量を合計する別のフィールドを持っています。私はこれを行うとき、悪名高いオブジェクト参照エラーがオブジェクトエラーのインスタンスに設定されていない取得します。私はそれがヌルか何かがあるからだと仮定します。フィールドには他の値またはNULLが含まれます。nullを返すデータを引き出すwhere句を持つlinqのフィールドを合計するにはどうすればよいですか?

これは私が持っているクエリです。私は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 not available] ---> System.NullReferenceException:オブジェクト参照がオブジェクトのインスタンスに設定されていません。 at lambda_method(Closure、Object []) –

答えて

2

あなたが値を合体することにより、第1の問題を解決することができます(xまたはx.Itemがnullの場合、今では値として0を取る):

.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

最初の部分を試しましたが、それはエラーをもたらします: "式ツリーラムダにはnullの適切な演算子が含まれていないかもしれません"。私はテストすることはできませんが、persentage電卓が動作するように思えます。 –

+0

@JudithJoubertアップデートをご覧ください。 –

関連する問題