2012-10-30 42 views
0

在我的實體中,我有4列A,B,C,D,如果我想要所有的列上有不同的D,我該怎麼做Linq? 例如:當我有2列以上時,我怎樣才能清楚?

Col A =1 Col B=2 Col C=3 Col D=4 
Col A =1 Col B=2 Col C=9 Col D=4 

現在,當我在山口d做不同的我想要顯示的記錄中的任何一個不能同時使用。 有沒有辦法做到這一點Linq我不想使用循環語句來做到這一點。

+3

你能不能組列表用'D',然後做一個'。首先()'就可以了? –

+0

你如何決定採取哪條記錄?有沒有任何標準,或者你真的只是想隨機選擇其中一個? – goric

+1

http://stackoverflow.com/questions/1606679/remove-duplicates-in-the-list-using-linq/1606686#1606686 –

回答

0
void Main() 
{ 
    //Your provided sample data 
    IEnumerable<Item> data = new Item[] 
    { 
     new Item{ A = 1, B = 2, C = 3, D = 4 }, 
     new Item{ A = 1, B = 2, C = 9, D = 4 }, 
    }; 

    //Create a custom comparer for distinct'ing 
    CustomComparer comparer = new CustomComparer(); 

    //Use the overload for distinct 
    IEnumerable<Item> distinctData = data.Distinct(comparer); 

    //Now we have a distinct list according to your comparer 
    foreach (var element in distinctData) 
    { 
     Console.WriteLine(element.C.ToString()); // => 3 
    } 
} 

//sample class that holds your data 
class Item 
{ 
    public int A { get; set; } 
    public int B { get; set; } 
    public int C { get; set; } 
    public int D { get; set; } 
} 

class CustomComparer : IEqualityComparer<Item> 
{ 
    public bool Equals(Item x, Item y) 
    { 
     return x.D == y.D; 
    } 

    public int GetHashCode(Item obj) 
    { 
     return obj.D; 
    } 
} 

你確定你不想寫一個簡單的循環:-)