2013-04-26 168 views
0

我有以下類別:選擇獨特的元素

public class Test 
{ 
    public string ColumnA { get; set; } 
    public int ColumnB { get; set; } 
    public int ColumnC { get; set; } 
} 

的以下列表:

List<Test> testList = new List<Test>() 
{ 
    new Test() { ColumnA = "Element 1", ColumnB = 1, ColumnC = 3 }, 
    new Test() { ColumnA = "Element 2", ColumnB = 2, ColumnC = 2 }, 
    new Test() { ColumnA = "Element 3", ColumnB = 1, ColumnC = 3 }, 
    new Test() { ColumnA = "Element 4", ColumnB = 4, ColumnC = 4 }, 
    new Test() { ColumnA = "Element 5", ColumnB = 5, ColumnC = 5 }, 
    new Test() { ColumnA = "Element 6", ColumnB = 7, ColumnC = 0 }, 
    new Test() { ColumnA = "Element 7", ColumnB = 7, ColumnC = 0 } 
}; 

所以,我想只選擇唯一的元素(即列B和C別t與其他元素相同),即:「元素2」,「元素4」和「元素5」。

Obs:我不想帶來獨特的元素,重複的元素我不想把它們都帶進去,兩者都是。

我該怎麼做?

回答

3
var results = source.GroupBy(x => new { x.ElementB, x.ElementC }) 
        .Where(g => g.Count() == 1) 
        .Select(g => g.Single()); 

只是組使用ElementBElementC屬性,並從中只有一個元素的組中獲取元素(這意味着它們是唯一的)。

+0

+1,而我正在打字 – vlad 2013-04-26 19:42:37

0

使用LINQ to選擇沒有重複的元素:

Test[] noDupes = testList.Where(item => 
    !testList.Except(new[] { item }).Any(inner => inner.Equals(item)) 
).ToArray(); 

(這是假設,當然你在Test實現Equals

+0

當我們使用不同由於構件,只帶來重複元件中的一個,是嗎?例如,列表:1,1,2,3,4,5,5,6,如果我使用不同,我會有另外一個列表1,2,3,4,5,6,正確嗎? – 2013-04-26 19:34:31

+0

@ViniciusOttoni是的,沒錯。 – McGarnagle 2013-04-26 19:37:58

+0

但是,就我而言,我的目標是隻帶2,3,4和6,因爲1和5是重複的。理解? – 2013-04-26 19:39:01

0

什麼拉姆達

List<Test> answer = testList.Where(t => t.ColumnB == t.ColumnC).ToList(); 
+0

問題的目標不是帶有列B和C相等的元素,其目標是「只選擇唯一元素(列B和C不與其他元素相同)」,而不是自身。 – 2013-04-26 19:36:28

+0

我很困惑什麼「(列B和C不是和其他元素相同)」意思是 – Jonesopolis 2013-04-26 19:38:28

-1

一個可以寫

List<Test> data = testList.FindAll(test => test.ColumnB == test.ColumnC); 

方法FindAll被優化的List<T>.FindAll