2017-09-21 9 views
0

フィールドオブジェクトのリストがあり、パラメータには(文字列)Nameと(int)Sizeのパラメータがあります。linqを使用するパラメータ内の最大値の2つのリストを比較します

また、Fieldオブジェクトのリストを含むFileオブジェクトのリストもあります。Fileオブジェクトのうちのいくつかは、Overarching Fieldオブジェクトに表示される場合があります。

すべてのFieldオブジェクトを調べ、すべての可能なFile-Fieldオブジェクトの最大値を見つける必要があります。

3を入れ子にするとできますか? forループが、私はlinqでこれが可能かどうかを見たいと思った。 FileObjectにクラス内

List<fieldobject> mainfields; 
List<fileobject> files; 

:ループの中

List<fieldobject> fields; 

基本的な考え方は次のようになります。

foreach (fieldobject field in mainfields) 
    foreach (fileobject file in files) 
     foreach (fieldobject fileField in file.fields) 
      if (field.name == fileField.name) 
       field.size = math.max(field.size,fileField.size); 

私はLINQを持つ場合と、割り当てを置き換えることができますが、私が期待していましたforループのほとんどまたはすべてを取り除く。どんな助けでも大歓迎です。

+0

あなたのコードがコンパイルされませんが、最小の作業例を提供してください:https://stackoverflow.com/help/mcve – Isma

+0

2番目のループからのファイルはどこにありますか?それは 'field.files'でしょうか? –

+0

メインクラスがあります。 リスト mainfields リストファイル FileObjectにクラスがあります。 リストを 私が主目的に添付されているすべてのファイルをループしていて、直接接続されたフィールドに自分のフィールドを比較しますメインオブジェクトに移動します。コードはいくつかの{}が不足しているかもしれませんが、表示されるように動作するはずです – KnightsOfTheRoun

答えて

1

私が正しく理解していれば、あなたがSelectMany拡張メソッドを使用する必要がありますので、file.fieldsはFileObjectにオブジェクト内部のFileObjectの内部リストである:(第2のforeachは意味をなさない)

foreach (fileobject field in mainfields) 
{ 
    field.size = files.SelectMany(x => x.fields) 
    .Where(y => y.name == field.name).Select(m => m.size).Max(); 
} 
+1

ありがとうございます。私はこれが可能であることを知っていましたが、私は雌牛を持っていないし、まだ男を選んで選択しています。とても有難い! – KnightsOfTheRoun

0

次のようなものがあります。

foreach (fieldobject field in mainfields) 
{ 
    int maxFileSize = files.Where(f => f.name == field.name) 
          .Select(f => f.size) 
          .Max(); 
    if (field.size < maxFileSize) 
    { 
     field.size = maxFileSize; 
    } 
} 
+1

mainFieldsとfiles.fieldsの.nameの比較がありません – KnightsOfTheRoun

関連する問題