C# 展平Linq组查询
我有一个这样的数据列表:C# 展平Linq组查询,c#,linq,group-by,linq-to-objects,C#,Linq,Group By,Linq To Objects,我有一个这样的数据列表: ID AddressPurpose Address ... 1 L 1 P 2 L 2 P 3 P 3 L 4 P 4 L 5 P 6 L 我希望能够过滤数据,以便对于每个唯一的数字,如果有一个p行,则返回它,否则返回L行。因此,数据如下所示: ID AddressPurpose Address ... 1 P 2 P 3 P 4 P 5 P 6 L 目前,我有一个很好的查询: var query = from c in list
ID AddressPurpose Address ...
1 L
1 P
2 L
2 P
3 P
3 L
4 P
4 L
5 P
6 L
我希望能够过滤数据,以便对于每个唯一的数字,如果有一个p行,则返回它,否则返回L行。因此,数据如下所示:
ID AddressPurpose Address ...
1 P
2 P
3 P
4 P
5 P
6 L
目前,我有一个很好的查询:
var query = from c in list
orderby c.AddressPurpose descending
group c by c.ID
into g
select g;
var finalList = new List<Company>();
foreach (var list in query)
{
finalList.Add(list.First());
}
return finalList;
var query=来自列表中的c
orderby c.AddressPurpose降序
c组按c.ID
进入g
选择g;
var finalList=新列表();
foreach(查询中的var列表)
{
Add(list.First());
}
回归终结者;
有没有更好的方法不使用额外的foreach来实现这一点?您可以随时嵌套查询:
var query =
from i in (
from c in list
orderby c.AddressPurpose descending
group c by c.ID into g
select g)
select i.First();
return query;
我相信这不是唯一的方法(甚至可能是最好的),但它确实将您的“foreach”封装到了一个查询中
编辑
事实上,您可以将其简化为:
var query = from c in list
orderby c.AddressPurpose descending
group c by c.ID into g
select g.First();
这似乎给出了正确的结果。你为什么不选择
而选择
?你一定是在我编辑自己的回复时输入的,lc+1.我想是的。我也喜欢嵌套查询,它们可以在需要迭代复杂查询时重用。谢谢。这很有效。我现在有点理解了“into g”部分。你可能也对这篇文章感兴趣,它讨论了into关键字
var finalList = list
.GroupBy(c => c.ID)
.Select(g => g.OrderByDescending(c => c.AddressPurpose).First())
.ToList();