我有这个系列:
{
Id: 5,
postalcodes: {2000, 3000, 4000}
},
{
Id: 5,
postalcodes: { 2000, 5000 }
},
{
Id: 6,
postalcodes: { 2000, 7000 }
}
我想获得一个包含ID和邮政编码的对象列表。 ID可能会多次出现,但邮政编码应该是唯一的PER ID。
所以我的结果是:
{
id: 5,
postalcode: 2000
}
{
id: 5,
postalcode: 3000
}
{
id: 5,
postalcode: 4000
}
{
id: 5,
postalcode: 5000
}
{
id: 6,
postalcode: 2000
}
{
id: 6,
postalcode: 7000
}
这是我的疑问:
collection.Select(x => new
{
x.id,
x.postalcodes
})
.Distinct()
我坚持如何压扁邮政编码,因此每个邮政编码都会创建一个单独的对象。
谢谢!
答案 0 :(得分:3)
我认为你的意思是:
var pairs = collection.SelectMany(x => x.postalcodes.Select(
y => new { x.Id, postalcode = y })).Distinct();
foreach(var pair in pairs)
{
Console.WriteLine($"{pair.Id}, {pair.postalcode}");
}
或者使用LINQ 语言术语:
var pairs = (from x in collection
from postalcode in x.postalcodes
select new { x.Id, postalcode }).Distinct();
SelectMany
扩展内部集合,为我们提供所有Id
/ postalcode
对;然后Distinct
将它们折叠成唯一身份。
给出了:
5, 2000
5, 3000
5, 4000
5, 5000
6, 2000
6, 7000
对于数据,我正在使用:
var collection = new[] { new {
Id = 5,
postalcodes = new[] { 2000, 3000, 4000}
},
new {
Id = 5,
postalcodes = new[] { 2000, 5000 }
},
new {
Id = 6,
postalcodes = new[] { 2000, 7000 }
}};
答案 1 :(得分:1)
您可以使用SelectMany
来平坦内部集合,即:
collection
.SelectMany(i => i.postalcodes.Select(j=>new{i.id, postalcode = j}))
.Distinct()