2016-09-08 16 views
1

次のOUTER JOIN LINQクエリでは、右側の行がnullの場合にWhere句にNULL例外が発生します(c.CustomerID外部結合のord.CustomerIDと一致しません)。 質問:ord.priceがnullである場合、ケースを処理するにはどうすればいいですかWhere clause:価格はNULL型のタイプint?です。Where句のSQL IsNull(..、..)のLINQ相当

Query1 = from c in Customers 
      join ord in Orders on c.CustomerId equals ord.CustomerId into cord 
       from t in cord.DefaultIfEmpty() 
      where t.price = null || t.price > 100 
      select new {CustName = c.Name, OrderID = (t == null ? 0 : t.OrderId)}; 

UPDATE:ごめんなさい

は、where句にタイプミスがありました。

  1. 指摘JeffMercado @として、それはWhere節に欠落している節がありましたt.priceないord.price
  2. でなければなりません。私はそれを修正しました:where t.price = null || t.price > 100。しかし、今、私はエラーを取得しています:あなたがこれを行うことができますoperator || cannot be applied to operands of type '<null>' and 'int'
+0

を、あなたは句、すなわちord.price> 100 && ORDに条件を追加することができます.price!= null –

+0

@RohitGarg申し訳ありませんが、投稿に入力ミスがありました。 **更新**セクションを投稿に追加しました。 – nam

+0

@RohitGargこれは、 "ord.price!= null && ord.price> 100"のような短絡 "AND"の前にord.price!= nullを入れなければならない場合、第2の条件はチェックされません。 :) –

答えて

2

:価格がNULL可能である場合

Query1 = from c in Customers 
      join ord in Orders on c.CustomerId equals ord.CustomerId into cord 
       from t in cord.DefaultIfEmpty() 
      where (ord.price ?? 0) > 100 
      select new {CustName = c.Name, OrderID = (t == null ? 0 : t.OrderId)}; 
+0

ありがとうございました。あなたの提案を使用して、私はエラー '演算子を得ていますか? 'int'と 'int'型のオペランドには適用できません。私はわからないが、それは私のポストの**ノート**と関係があるかもしれない。 – nam

+1

価格はNULL可能ではありません。タイプはintでなければなりません。 – robert

+0

はい、それは私が**ノート**の注記に書いたとおりです。 – nam