259

LINQクエリについて質問があります。通常、クエリはIEnumerable<T>タイプ。戻り値が空の場合、それがnullかどうかはわかりません。私は次の場合わからないToList()例外または単に空をスローしますList<string>何も見つからなかった場合IEnumerable結果?

   List<string> list = {"a"};
   // is the result null or something else?
   IEnumerable<string> ilist = from x in list where x == "ABC" select x;
   // Or directly to a list, exception thrown?
   List<string> list1 = (from x in list where x == "ABC" select x).ToList();

私はそれが非常に単純な質問であることを知っています、しかし私は当分の間利用可能なVSを持っていません。


  • 結果はEnumerableです。空ですか? - David.Chu.ca

7 답변


418

空の列挙型を返します。 nullにはなりません。あなたは音を眠ることができます:)


30

また確認することができます.Any()方法:

if (!YourResult.Any())

ちょっと注意してください.Anyそれでもデータベースからレコードを取得します。する.FirstOrDefault()/.Where()オーバーヘッドも同じくらいになりますが、クエリから返されたオブジェクトをキャッチできます。


  • 質問はデータベースをどこに言及しますか。 - cja
  • あなたは編集した人に尋ねる必要があるでしょう、私はどんなDBも言及しませんでした:) - Noich
  • ポイントエディタが作っているのはいいのですが、DBかどうか。私は彼らが言っていると思います.Any()一致するレコードがある場合は、実際にクエリを実行して特定の値を検索するとnullになる可能性があるかどうかを通知するだけです。.Any()そうではありません。 - vapcguy
  • 編集は実際には間違っているかもしれません。 linqをエンティティに使用している場合、dbはこれをショートカットする可能性があり、trueまたはfalseを除いてクライアントにデータがまったく送信されません。 - Mafii

16

var lst = new List<int>() { 1, 2, 3 };
var ans = lst.Where( i => i > 3 );

(ans == null).Dump();  // False
(ans.Count() == 0 ).Dump();  // True

(ダンプはLinqPad


  • その通り!あなたは調査結果のより良い指標を得る - netfed
  • TOCount()プロパティではなく、メソッドでもあります。 - heyNow
  • countはすべての項目を列挙するため、.Any()を使用しないでください。 - SHEePYTaGGeRNeP

11

.ToListは空のリストを返します。 (new List()と同じ);


6

Linq-to-SQLでクエリの最初の要素を取得しようとしても結果が得られない場合は、次のようになります。sequence contains no elementsエラー。私はあなたに言及されたエラーがに等しくないことを保証することができますobject reference not set to an instance of an object。 結論として、いいえ、nullとは言えないのでnullは返されません。sequence contains no elementsそれはいつも言うだろうobject reference not set to an instance of an object;)


  • ああ、あなたの説明はさらなる理解に役立ちます。ありがとうございました ! - Kay Lee

5

他の記事では、結果が "空の" IQueryableであることを明らかにしています。これはToList()が空のリストなどに正しく変更されます。

何人かの演算子には注意してください。空の列挙型を送った場合にはスローされます。あなたがそれらを一緒にチェーンするとき、これは起こり得る。


  • "空の列挙型を送信した場合にスローされるため、一部の演算子には注意してください。これは、連鎖しているときに発生する可能性があります。 - これは私を得たものです。 nullの戻り値があり、それを別のクエリに渡しました。 2番目のクエリに値が入力されていないため、これを何にキャストしても2番目のクエリがスローされました。 - trevorc

4

それは例外をスローしません、あなたは空のリストを取得します。

リンクされた質問


関連する質問

最近の質問