在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。

在c#中使用LINQ从列表中删除重复对象

你的问题How can I group ...似乎很奇怪。看来你想要How can I select ...。接下来我会问你想如何分组/选择只获得c1c2。不存在c1和c2所共有而c3所不具有的属性。

如果你想得到c2和c3,那么试试:

columns
   .Where(c => c.EndElevation == 630)

更新问题的答案

获取不同值的标准方法很久以前就在使用linq.

删除列表中的重复项时得到了回答。

您需要做的是为Column类添加一个比较器,然后尝试:

var distinctColumns = columns
   .Distinct(new ColumnComparer());