2016-05-27 6 views
0

誰もこのLINQクエリを複数の行に簡略化する方法を説明できますか?LINQクエリを解決する

Data.StoredItems.GroupBy(i => i.Name, ((name, cps) => new { Name = name, Components = cps.Where(cp => cp.Name == name).GroupBy(cp => cp.Type, (type, components) => new { Type = type, List = components.ToList() }).ToList() })) 
+3

各パラメータとメソッド呼び出しを別の行に置くことで*始めることができます。これにより読みやすさが大幅に向上します。私はあなたがその質問でそれをすることをお勧めします。 –

+0

linq式で使用するlinqメソッドに応じて、関数や式、アクションを別々に宣言し定義することができます –

答えて

0

[メソッド呼び出し]では、代わりにコレクションに格納して、次の行でチェーンを続けることができます。

例えば:

VARクエリ= Data.StoredItems

するvar QUERY2 = query.GroupBy(I => i.Name、((名前、CPS)=>新しい{NAME =名、コンポーネント= cps.Where(CP => cp.Name ==名)

とそこからの継続

それはデバッグのためだけなら、私はあなたが「のぞき見」コードを書くに見勧めかもしれませんが好き:。。

.ForEach(item => Console.WriteLine(item.toString);

https://www.simple-talk.com/dotnet/.net-framework/linq-secrets-revealed-chaining-and-debugging/

1

目標は、あなたがこのようにそれを行うことができ、それをより読みやすくするためである場合:

Data.StoredItems 
    .GroupBy(
     i => i.Name, 
     ((name, cps) => new 
     { 
      Name = name, 
      Components = 
       cps //.Where(cp => cp.Name == name) This Where call here is redundant 
       .GroupBy(
        cp => cp.Type, 
        (type, components) => new 
        { 
         Type = type, 
         List = components.ToList() 
        }) 
       .ToList() 
     })) 

それを必要としないので、私はWhereを削除しますのでご注意ください。 cpsの商品は、すでにNamenameに相当します。

関連する問題