我有一个像这样的数据列表:
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;
如果不使用额外的foreach,有没有更好的方法呢?
答案 0 :(得分:10)
您可以随时嵌套查询:
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();
这似乎给出了正确的结果。
答案 1 :(得分:3)
为什么不select
g.First()
呢?
答案 2 :(得分:2)
var finalList = list
.GroupBy(c => c.ID)
.Select(g => g.OrderByDescending(c => c.AddressPurpose).First())
.ToList();