2011-06-27 51 views
0

表1:獲取特定表的唯一組合?

ValueA 
ValueB 
ValueC 

示例數據:

1,2,3 
1,2,4 
1,2,4 
1,2,4 
1,5,6 
1,5,6 

我想基於這三個值來獲得唯一的行:

1,2,3 
1,2,4 
1,5,6 

怎麼可以這樣使用LINQ最容易做?

回答

1

編寫自己的IEqualityComparer並在代表行的對象集合上使用Enumerable.Distinct

喜歡的東西(對不起,沒有在一個編譯器測試):

class Foo { 
    public int ValueA { get; set; } 
    public int ValueB { get; set; } 
    public int ValueC { get; set; } 
} 

class FooEqualityComparer : IEqualityComparer<Foo> { 
    public bool Equals(Foo x, Foo y) { 
     if(Object.ReferenceeEquals(x, y)) { return true; } 
     if(x == null || y == null) { return false; } 
     return x.ValueA == y.ValueA && 
       x.ValueB == y.ValueB && 
       x.ValueC == y.ValueC; 
    } 

    public int GetHashCode(Foo obj) { 
     if(obj == null) { return 0; } 
     unchecked { 
      int hashCode = 17; 
      hashCode = hashCode * 23 + obj.ValueA.GetHashCode(); 
      hashCode = hashCode * 23 + obj.ValueB.GetHashCode(); 
      hashCode = hashCode * 23 + obj.ValueC.GetHashCode(); 
      return hashCode; 
     } 
    } 
} 

然後:

IEnumerable<Foo> foos = // some foos; 
var distinct = foos.Distinct(new FooEqualityComparer()); 
0

你可以使用.Distinct()用自己的比較器類

class MyComparer : IEqualityComparer<YourRowClass> 

然後像

yourList.Distinct(MyComparer())