2012-01-13 13 views
2

IList型のすべてのプロパティを公開するオブジェクトのリストがあります。 このリストをそのリストの値でグループ化したいと思います。だから、例えばとしましょう:私はC#&Linq:値リストに従ってリストメンバーをグループ化する

A: OB1 
B: OB1, OB3 
C: OB1, OB2, OB3 
D: OB2 
E: OB2, OB3 

がしたい出力として

OB1: Property is A, B, C 
OB2: Property is D, C, E 
OB3: Property is B, E, C 

私はこの問題を解決するための便利なLINQ式について考え、それがで可能であるならば、それはすべての参照を見つけることができませんでしたすべて。私はループでそれを行うことができます...しかし、私はLINQで可能な場合は好奇心が強いです。あなたが試すことができ

おかげ

答えて

0

LINQPadため

list 
    .SelectMany(x => x.Property.Select(p => new { Key = p, Value = x })) 
    .GroupBy(p => p.Key) 
    .Select(g => new { g.Key, Values = g.Select(x => x.Value).ToList() }) 
1

はサンプル:このような構造を仮定し

var original = new[] 
{ 
    new { Name = "OB1", Property = new [] { "A", "B", "C" } }, 
    new { Name = "OB2", Property = new [] { "D", "C", "E" } }, 
    new { Name = "OB3", Property = new [] { "B", "E", "C" } }, 
}; 

var output = original 
    .SelectMany(o => o.Property, (o, i) => new { Name = o.Name, Item = i }) 
    .GroupBy(e => e.Item); 
1

var list = new [] { 
    new {Name="OB1", Prop=new[]{"A", "B", "C"}}, 
    new {Name="OB2", Prop=new[]{"D", "C", "E"}}, 
    new {Name="OB3", Prop=new[]{"B", "E", "C"}}, 
} 

あなたは次のことを書くことができますクエリの理解:

from ob in list 
let Name = ob.Name 
from val in ob.Props 
group ob.Name by val 

あなたは、オブジェクトだけでなく、自分の名前に直接マッピングの代わりにこれをしたい場合:

from ob in list 
from val in ob.Props 
group ob by val 
+0

最後のものは...素敵なエレガントだった:) –

0
var list = new[] { 
       new {Name="OB1", Prop=new[]{"A", "B", "C"}}, 
       new {Name="OB2", Prop=new[]{"D", "C", "E"}}, 
       new {Name="OB3", Prop=new[]{"B", "E", "C"}}, 
      }; 

var props = from prop in (from item in list 
          from p in item.Prop 
          select p).Distinct() 
      let names = list.Where(i => i.Prop.Contains(prop)).Select(i => i.Name).ToArray() 
      select new { prop, names }; 
関連する問題