在c#中使用LINQ从列表中删除重复对象
本文关键字:删除 列表 对象 LINQ | 更新日期: 2023-09-27 18:01:21
这里我有一个Column
对象列表。每个Column
对象都有几个属性,这些属性可能是唯一的,也可能不是。这是我到目前为止写的一个示例代码。我如何从columns
列表中删除重复项,以便在最终列表中只有c1和c2?
Program.cs
var pc1 = new PartialColumn { Section = "C50" };
var pc2 = new PartialColumn { Section = "C40" };
var c1 = new Column
{
X = 0,
Y = 0,
StartElevation = 0,
EndElevation = 310,
FoundationHeight = 60,
ListOfPartialColumns = new List<PartialColumn> {pc1}
};
var c2 = new Column
{
X = 600,
Y = 0,
StartElevation = 0,
EndElevation = 630,
FoundationHeight = 60,
ListOfPartialColumns = new List<PartialColumn> { pc1, pc2 }
};
var c3 = new Column
{
X = 600,
Y = 0,
StartElevation = 0,
EndElevation = 630,
FoundationHeight = 60,
ListOfPartialColumns = new List<PartialColumn> { pc1, pc2 }
};
var columns = new List<Column> {c1, c2, c3};
PartialColumn.cs
public class PartialColumn
{
public string Section { get; set; }
}
Column.cs
public class Column
{
public double StartElevation { get; set; }
public double EndElevation { get; set; }
public double X { get; set; }
public double Y { get; set; }
public List<PartialColumn> ListOfPartialColumns { get; set; }
public double FoundationHeight { get; set; }
}
更新:
我想从列列表中删除重复项。如你所见,c2和c3具有相同的性质。我要消去c3。
你的问题How can I group ...
似乎很奇怪。看来你想要How can I select ...
。接下来我会问你想如何分组/选择只获得c1
和c2
。不存在c1和c2所共有而c3所不具有的属性。
如果你想得到c2和c3,那么试试:
columns
.Where(c => c.EndElevation == 630)
更新问题的答案
获取不同值的标准方法很久以前就在使用linq.
删除列表中的重复项时得到了回答。您需要做的是为Column
类添加一个比较器,然后尝试:
var distinctColumns = columns
.Distinct(new ColumnComparer());