我有以下课程:
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:我不想带来不同的元素,重复的元素,我不想带它们,两者都是。
我该怎么做?
答案 0 :(得分:3)
var results = source.GroupBy(x => new { x.ElementB, x.ElementC })
.Where(g => g.Count() == 1)
.Select(g => g.Single());
只需使用ElementB
和ElementC
属性进行分组,并从其中只包含一个元素的组中获取元素(这意味着它们是唯一的)。
答案 1 :(得分:0)
使用Linq选择没有重复的元素:
Test[] noDupes = testList.Where(item =>
!testList.Except(new[] { item }).Any(inner => inner.Equals(item))
).ToArray();
(这假设您已在Equals
上实施Test
,当然。)
答案 2 :(得分:0)
lambda
怎么样? List<Test> answer = testList.Where(t => t.ColumnB == t.ColumnC).ToList();
答案 3 :(得分:-1)
可以写
List<Test> data = testList.FindAll(test => test.ColumnB == test.ColumnC);
方法FindAll
已根据List<T>.FindAll