2011-07-24 6 views
2

私はLinqでグループ化したいオブジェクトのセットを持っています。しかし、私が使用したいキーは、複数のキーの組み合わせです。例えばLINQの複数のグループに同じオブジェクトを追加できますか?

Object1: Key=SomeKeyString1 

Object2: Key=SomeKeyString2 

Object3: Key=SomeKeyString1,SomeKeyString2 

のために今、私は基本的に私が同じオブジェクトを2つのグループの一部になりたいの結果は2つだけのグループ

Grouping1: Key=SomeKeyString1 : Objet1, Object3 

Grouping2: Key=SomeKeyString2 : Object2, Object3 

ようにしたいと思います。それはLinqで可能ですか?

答えて

4

まったくではありません。は、直接GroupByまたはGroupJoinです。どちらもオブジェクトから単一のグループ化キーを抽出します。

from groupingKey in groupingKeys 
from item in items 
where item.Keys.Contains(groupingKey) 
group item by groupingKey; 

サンプルコード:

using System; 
using System.Collections.Generic; 
using System.Linq; 

class Item 
{ 
    // Don't make fields public normally! 
    public readonly List<string> Keys = new List<string>(); 
    public string Name { get; set; } 
} 

class Test 
{ 
    static void Main() 
    { 
     var groupingKeys = new List<string> { "Key1", "Key2" }; 
     var items = new List<Item> 
     { 
      new Item { Name="Object1", Keys = { "Key1" } }, 
      new Item { Name="Object2", Keys = { "Key2" } }, 
      new Item { Name="Object3", Keys = { "Key1", "Key2" } }, 
     }; 

     var query = from groupingKey in groupingKeys 
        from item in items 
        where item.Keys.Contains(groupingKey) 
        group item by groupingKey; 

     foreach (var group in query) 
     { 
      Console.WriteLine("Key: {0}", group.Key); 
      foreach (var item in group) 
      { 
       Console.WriteLine(" {0}", item.Name); 
      } 
     } 
    } 
} 
しかし、あなたのような何かを行うことができます
関連する問題