【发布时间】:2021-10-28 05:03:54
【问题描述】:
我想过滤掉 "" 名称,然后选择每个存在重复 ID 的唯一位置,而不考虑名称:
数据设置
var list = new[]
{
new { id = 3, Name = "", Location = "LocationA" },
new { id = 2, Name = "", Location = "LocationA" },
new { id = 1, Name = "T", Location = "LocationB" },
new { id = 2, Name = "H", Location = "LocationB" },
new { id = 3, Name = "E", Location = "LocationB" },
new { id = 3, Name = "R", Location = "LocationB" },
new { id = 5, Name = "U", Location = "LocationC" },
new { id = 5, Name = "S", Location = "LocationC" },
new { id = 5, Name = "S", Location = "LocationD" },
new { id = 4, Name = "O", Location = "LocationD" },
new { id = 4, Name = "Z", Location = "LocationE" },
};
查询
var query1 = list
.Where(s => s.Name != "")
.GroupBy(g => g.Location)
.Where(w => w.Select(s => s.Location).Count() > 1)
.SelectMany(s => s)
.GroupBy(g => g.id)
.Where(w => w.Select(s => s.id).Count() > 1)
.SelectMany(s => s)
.ToList();
Console.WriteLine("output\n" + string.Join("\n", query1));
退货
{ id = 3, Name = E, Location = LocationB }
{ id = 3, Name = R, Location = LocationB }
{ id = 5, Name = U, Location = LocationC }
{ id = 5, Name = S, Location = LocationC }
{ id = 5, Name = S, Location = LocationD }
vs我真正想要的
{ id = 3, Name = E, Location = LocationB }
{ id = 3, Name = R, Location = LocationB }
{ id = 5, Name = U, Location = LocationC }
{ id = 5, Name = S, Location = LocationC }
LocationD 的 ID 为 4 和 5,因此它应该被过滤掉,但我无法这样做。我究竟做错了什么?如何更正?
【问题讨论】:
-
我猜你又在问类似的问题,stackoverflow.com/q/69733137/6299857
-
这能回答你的问题吗? C# select duplicate using group
-
不,不是,如果您使用该查询的输入运行该查询的解决方案,您将获得 7 个返回与 4 的实际答案。这里的查询不同,我希望先进行多个分组或分组然后再次重新组合,而不是之前对单个组的查询。