2014-05-03 85 views
0

這裏我有一個Column對象的列表。每個Column對象都有幾個可能是唯一的屬性。以下是我迄今爲止編寫的一個示例代碼。如何從columns列表中刪除重複項,以便在最終列表中只有c1和c2?使用c#中的LINQ從列表中刪除重複的對象#

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

+0

你應該根據你想要的分組這些對象告訴。實際上,通過對項目進行分組,您不會減少元素數量。這並不是什麼。你應該使用'where'來過濾一些項目。 –

+0

@TolgaEvcimen我更新了問題。 – Vahid

+0

@CameronMacFarland問題是我有另一個列表作爲我的'Column'類的屬性,這讓我感到困惑。 – Vahid

回答

2

您的問題How can I group ...似乎很奇怪。看來你想要How can I select ...。接下來我會問你想如何分組/選擇只得到c1c2。沒有屬性是c1和c2共有的,而不是c3。

如果你想獲得C2和C3,然後嘗試:

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

回答到更新的問題

標準的方式來獲得不同的值在Remove duplicates in the list using linq早就回答。

你需要做的是增加一個比較的Column類,然後嘗試:

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

我想刪除'columns'列表中的重複項。如您所見,c2和c3具有相同的屬性。我想刪除c3。 – Vahid

+0

我是否應該爲'Column'類覆蓋GetHashCode()'和'Equals()'? – Vahid

+1

這是另一種方法。通過使用特定的比較器,您可以避免頭痛。 –

相關問題