2017-02-22 9 views
1

複数フィールドの検索ボックスを使用してオブジェクトの一覧をフィルタリングしようとしています。それはテキストを取り、検索をリストに適用します。ただし、アドレス2と3は、送信されたアドレスに応じて、空白になる可能性があります(この場合、リストには オブジェクトが含まれていません)。LINQ:フィールドがnullになる可能性があるオブジェクトの一覧の複数のフィールドを検索

私は以下の式を持っています。

Properties.Where(x => x.Address1.ToLower().Contains(senderElement.Text) 
        || x.Address2.ToLower().Contains(senderElement.Text) 
        || x.Address3.ToLower().Contains(senderElement.Text)) 
      .ToList(); 

現在、nullフィールドを検索できないため、現在例外がスローされています。

nullフィールドをスキップするか無視するにはどうすればよいですか?それは単一の式で行うことができますか?

答えて

3

をnull値をチェックしますあなたは、私はそれはまだ同じエラーをスローだと思う。この

(x?.Address1?.ToLower()??"").Contains(senderElement?.Text??"") 
+0

素敵できれいです。ありがとう! – Takarii

2

は、以下のことを試してみてください。

Properties.Where(x => (x.Address1 != null && x.Address1.ToLower().Contains(senderElement.Text)) 
       || (x.Address2 != null && x.Address2.ToLower().Contains(senderElement.Text)) 
       || (x.Address3 != null && x.Address3.ToLower().Contains(senderElement.Text))) 
     .ToList(); 

これは、同様

+0

のようないくつかのヌルチェックを追加することができます。問題は2番目の部分ができないことです – Takarii

+1

@Takarii:それはエラーをスローしません。 &演算子は短絡です。最初の条件がfalseの場合、次の条件はチェックされません。 –

+0

私はそれを認識していませんでした。私はそれが両方を試して評価しようとしていると思って、次に決定しました – Takarii

関連する問題