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 列不同),即:“元素 2”、“元素 4”和“元素 5”。

Obs:我不想带不同的元素,重复的元素我不想带,两者都带。

我怎样才能做到这一点?

4

4 回答 4

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

只需对 usingElementBElementC属性进行分组,并从其中只有一个元素的组中获取元素(这意味着它们是唯一的)。

于 2013-04-26T19:39:42.083 回答
0

使用 Linq 选择没有重复的元素:

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

(当然,这假设您已经在 上实现EqualsTest。)

于 2013-04-26T19:29:05.310 回答
0

拉姆达呢

    List<Test> answer = testList.Where(t => t.ColumnB == t.ColumnC).ToList();
于 2013-04-26T19:32:13.240 回答
-1

可以写

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

该方法FindAll经过优化,由于成员List<T>.FindAll

于 2013-04-26T19:46:07.060 回答