2017-02-16 7 views
1

私はcodereviewを通過し、疑わしいものを見ています。匿名型を選択することはできますか?

以下のスニペットで結果がNULLになることはありますか?より一般的に

 var result = (from number in _cmContext.SrvLocationWarmLine 
         where String.Compare(number.CurrentWarmLine, startingRange, StringComparison.Ordinal) >= 0 
          && String.Compare(number.CurrentWarmLine, endingRange, StringComparison.Ordinal) <= 0 
         orderby number.CurrentWarmLine descending 
         select new { Number = number.CurrentWarmLine }).FirstOrDefault(); 

:を選択に対するFirstOrDefaultを適用した場合、結果はこれまでに、ヌルになることができますか?

+0

もちろん、nullでもかまいません。あなたの問題は何ですか? –

+0

'from'と' where'がゼロを返すと 'result'が' null'になるか、 'orderby'で例外がスローされると思います。 – TheLethalCoder

+0

はい、あなたのケースでは例外"オブジェクト参照がオブジェクト インスタンスに設定されていません。" numberがnullで、そこからメンバーにアクセスしようとしているとき –

答えて

3

はい。 resultは、シーケンスが空の場合はnullです。
_cmContext.SrvLocationWarmLinenumberwhere節の条件と一致しない場合に発生します。一般FirstOrDefault()


(述語引数なし)空のシーケンス(そのシーケンスがselectによって、または別の何かから返された場合に関係なく)のためnullを返します。

FirstOrDefault<T>(this IEnumerable<T>, Predicate<T>)は、述語に一致するシーケンス内に要素がない場合は、nullを返します。


クエリ構文でselectSelect(...)メソッド呼び出しに変換されることに注意してください。


編集:最終的な配列の要素の型が参照型である場合のみ、上記は当然適用されます。値タイプの場合、結果はdefault(type)となります。 0はである。

+0

例外はスローされませんが、私は次の行に沿って例外が発生していると確信しています:シーケンスには要素が含まれていません "というとき、空のシーケンスでオーダーを実行しようとしていますか? – TheLethalCoder

+0

@ TheLethalCoderいいえ、例外はありません。 'First()'( 'OrDefault'を除く)だけが空のシーケンスと' Single() 'を投げます。そして、 'SingleOrDefault()'は、複数の要素(マッチング)がある場合にスローされます。 –

+0

私はそれが 'FirstOrDefault'にスローされないことを知っています、それは' orderby'呼び出しの詳細ですが、Servyは上記の質問に答えました。 – TheLethalCoder

関連する問題