2017-10-27 12 views
1

は、私は次のエラーが表示されます 「System.InvalidOperationException」種類の未処理の例外がSystem.Core.dllマックス、SelectMany、可能性と無応答

で発生しました追加情報:シーケンスに要素

が含まれていませんon

MainFields.ForEach(Field => Field.Size = Math.Max(FilesObject.SelectMany(x => x.Fields).Where(y => y.Name == Field.Name).Select(m => m.Size).Max(), Field.Size)); 

My MainFieldsオブジェクトは、FilesObjectのすべてのフィールドに基づいて更新する必要があります。問題の根本的な原因は、FilesObjectにMainFieldsの名前が存在しないことです。

私はこれをループに分解して論理チェックを追加することができましたが、私はそれを避けるためにLinqに方法があることを期待していました。

+4

空の場合はデフォルトを使用する '.DefaultIfEmpty(0).Max()' –

+0

それだけです!ありがとうございました。 – KnightsOfTheRoun

答えて

3

、このような方法がありますが - Max()を呼び出す前にDefaultIfEmpty()を置く:コレクションに要素がない場合

Math.Max(FilesObject.SelectMany(x => x.Fields) 
    .Where(y => y.Name == Field.Name).Select(m => m.Size).DefaultIfEmpty(0).Max() 

DefaultIfEmptyには、1つのデフォルト要素を持つ列挙を返しますので、それは一つだけだから、その後Max()は(この要素を返します。 )空のコレクション(もちろん適切なデフォルト値を使用する、私は例えば0を使用した)。

+0

それだけです!ありがとうございました。 – KnightsOfTheRoun

関連する問題