Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 展平Linq组查询_C#_Linq_Group By_Linq To Objects - Fatal编程技术网

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();