有一个List包含下面的类
public class DummyClass
{
public string name { get; set; }
public int value { get; set; }
public string status { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
原始列表和预期输出如下所示
它应符合以下条件:
如果存在status = A的名称(例如A1和A2) - >删除包含相同名称和status = I的其他对等项(假设每个名称只有一个状态= A)如果名称包含许多状态=我但没有包含status = A的项目,那么只显示具有该名称的1项
它可以通过少量for循环实现并逐字删除重复的对等体.问题是否可以通过LINQ实现
这个怎么样:
var list = new[]
{
new DummyClass{ Name = "A1", Value=1, Status= "A" },
new DummyClass{ Name = "A1", Value=2, Status= "I" },
new DummyClass{ Name = "A2", Value=3, Status= "I" },
new DummyClass{ Name = "A2", Value=4, Status= "I" },
new DummyClass{ Name = "A2", Value=5, Status= "A" },
new DummyClass{ Name = "A3", Value=6, Status= "I" },
new DummyClass{ Name = "A3", Value=7, Status= "I" },
};
var aggregate = list
.OrderBy(item => item.Status)
.GroupBy(item => item.Name)
.Select(group => group.First());
foreach (var item in aggregate)
{
Console.WriteLine($"{item.Name} - {item.Value} - {item.Status}");
}
Run Code Online (Sandbox Code Playgroud)
它将首先按状态排序("A"出现在"I"之前),然后按给定名称分组.因此,每个组的第一个元素将是第一个"A"条目,或者如果缺少第一个"I"条目.
输出:
A1 - 1 - A.
A2 - 5 - A.
A3 - 6 - 我