2011-04-04 40 views
0

我能夠回到使用下面的代碼從我的收藏項的分組列表多個列表:LINQ的從使用的SelectMany

var items = collection.SelectMany(myObj => myObj.ToNames) 
    .GroupBy(name => name) 
    .Select(g => new { Name = g.Key, Count = g.Count() }); 

上面的代碼給了我唯一的名稱的一個不錯的名單和次數他們在收藏中被發現。我現在需要做同樣的事情,但是將來自在同一個MyObj中找到的兩個獨立集合的名稱進行分組。我現在想以同樣的方式將myObj.ToNames和myObj.FromNames分組 - 同時獲得找到的每個唯一名稱的總體唯一計數(無論發現哪個集合)。

這可能嗎?

回答

3

聯盟:

var items = collection.SelectMany(myObj => myObj.ToNames.Union(myObj.FromNames)) 
    .GroupBy(name => name) 
    .Select(g => new { Name = g.Key, Count = g.Count() }); 

的毗連:

var items = collection.SelectMany(myObj => myObj.ToNames.Concat(myObj.FromNames)) 
    .GroupBy(name => name) 
    .Select(g => new { Name = g.Key, Count = g.Count() }); 
+0

區別在於CONCAT將返回副本;最有可能這就是你想要的 – sehe 2011-04-04 21:59:52

+0

你應該更新你的Concat版本以反映.Concat,但這正是我正在尋找的。我需要考慮group by子句中的重複項,所以我假定使用Concat將完成此操作?謝謝! – Scott 2011-04-04 22:14:41