2016-10-27 7 views
0

2つの異なる整数のクエリを実行していますが、少なくとも1つは0以上である必要があります。どちらかintDefaultIfEmpty(0)が、私はそれをやっているか、他の全ての質問は異なり、それをやったし、0どちらかの項目がNULLの場合、Linq文は0を返す必要があります

は、私が知って返す必要がありnullであれば、私にはnull例外を与え.Sum()方法とそれらに基づく株式私はselectステートメントで2つの異なる変数を計算しています。このクエリを再作成できるほどの経験はありません。

public IEnumerable<Item> GetInStockTooling() 
{ 
    try 
    { 
     using (var context = new SpectrumContext()) 
     { 
      var inStock = context.Item 
       .Include(i => i.ItemType) 
       .Include(i => i.ItemLots) 
       .Include(i => i.LocationStocks) 
       .Where(w => w.ItemLots.Any(a => a.Quantity > 0 && a.JobItemID == null) || w.LocationStocks.Any(a => a.AmountOfStock > 0) && w.ItemTypeID == (int)ItemTypes.Tooling && w.IsActive) 
       .Select(b => new 
       { 
        b, 
        ItemLots = b.ItemLots.Where(w => w.JobItemID == null && w.Quantity > 0), 
        ItemType = b.ItemType, 
        LocationStocks = b.LocationStocks.Where(w => w.AmountOfStock > 0) 
       }) 
       .AsEnumerable() 
       .Select(x => x.b) 
       .ToList() 
       .Select(x => { x.Stock = x.ItemLots.Sum(s => s.Quantity) + x.LocationStocks.Sum(s => s.AmountOfStock); return x; }); 

      return inStock; 
     } 
    } 
    catch (Exception) 
    { 
     throw; 
    } 
} 

Iは、数量/ AmountOfStock上に?? 0?? 0mを行うことを試みたが、私はOperand cannot be applied to type 'decimal' and 'decimal'エラーを取得します。

私もDefaultIfEmptyを使用してみましたが、私は、彼らがSelect内のすべてのコンピューティングをやっていると私は私がDefaultIfEmptyの使用をSelectから引き出しする方法を知らない考慮それを使用することは考えています。

+0

あなたが見た「他の質問」とわからないので、これはかなりのショットガンの経験になるでしょう。あなたは[null値を持つLinqクエリ]のいずれかの答えを試しましたか(http://stackoverflow.com/q/696431/215552)? –

+0

なぜあなたは 'Select(x => x.b)'を離れて匿名クラスを作成する 'Select'を持っていますか? – juharr

+0

@MikeMcCaughan申し訳ありませんが、私が試したことを書きます。 Juharr私は知らない。これは私の時間の前にあった。私はまだ初心者ですので、この種のことを理解していますが、構文がわかりにくいです。 – user4648142

答えて

0

nullを確認してから0を返してください。

x.ItemLots.Sum(s => { return s.Quantity == null ? 0 : s.Quantity; }) + x.LocationStocks.Sum(s => { s.AmountOfStock == null ? 0 : s.AmountOfStock; }); 
0

どうやってこのようなことができますか?

x.ItemLots.Sum(s => s.Quantity ?? 0) + x.LocationStocks.Sum(s => s.AmountOfStock ?? 0); 

編集...

申し訳ありませんが、私は質問の最後にすべての方法を読んでいません。これをデバッグするのに役立つものは、大きなlinqステートメントの最後の行をコメントアウトし(ToList()の後で終わる)、そこにブレークポイントを設定して結果を確認することです。それはあなたがそれを修正する方法を知るように見ているものを明確にするのに役立ちます。

+0

または 'x.ItemLots.Sum(s => s.Quantity)?? 0 + x.LocationStocks.Sum(s => s.AmountOfStock)?? 0' – juharr

+0

私はそれを試みました。私はエラー "Operator '??' 'decimal'と 'int'の型には適用できません。私が0mに変更した場合、同じエラーが発生しますが、intの代わりに10進数 – user4648142

+0

@ user4648142 'Quantity'または' AmountOfStock'のうち、 – juharr

関連する問題