我有三个不同的集合,名为Collection1,Collection2,Collection3。现在我想通过他们的Id将它们分组,也想根据它们的最大数量来订购Id。我想要的第三件事是将该值添加到Icollection中。 我收藏如下:
Collection1:
value1
Id1
value2
...
Collection2:
value1
Id1
value2
Id2
...
Collection3:
value1
Id1
value2
Id2
...
注意:Id在集合中是唯一的。集合1或集合2或集合3的Id1可以相同但在集合内部ID不能相同。 我所做的如下:
var query = Collection1.Concat.Select(a => a.CountryId).Concat(Collection2.Select(b => b.CountryId).Concat(Collection3.Select(c => c.CountryId).GroupBy(x => x).OrderByDescending(x => x.Count()).ToDictionary(x => x.Key, x => x.Count());
为了将该值分配给ICollection变量,这就是我所做的:
foreach (var item in query )
{
ICollect.Add(item.Key);
}
我不确定使用.ToDictionary
。任何人都可以为此提出不同的方法。
感谢。
答案 0 :(得分:1)
所以你想要通过ID合并所有集合和组?由于ID在每个集合中都是唯一的,因此组大小最多可以为3。
var allIDs = Collection1.Select(x => x.ID)
.Concat(Collection2.Select(x => x.ID))
.Concat(Collection3.Select(x => x.ID))
.GroupBy(id => id)
.OrderByDescending(g => g.Count())
.Select(g => g.Key);
foreach(var id in allIDs)
otherCollection.Add(id);
如果您想保留每个ID的计数,可以使用ToLookup
:
var idLookup = Collection1.Select(x => x.ID)
.Concat(Collection2.Select(x => x.ID))
.Concat(Collection3.Select(x => x.ID))
.ToLookup(id => id)
.OrderByDescending(g => g.Count());
foreach(var g in idLookup)
{
otherCollection.Add(g.Key);
// you get the count in this way:
int count = g.Count();
}