根据C#/ LINQ中对象列表的类似值属性,检查属性是否唯一

时间:2017-02-09 07:34:21

标签: c# linq

我看到了很多几乎相似的场景,但找不到满足我需求的解决方案。我有一个对象列表,在该列表中,我想获得具有相似/重复属性但对该对象中的另一个属性具有不同值的对象。 例如,

List<Emp>

Emp.CubeNo      Emp.EmpId
------------------------------

A1                ABC    // get this
B1                XYZ
A1                EFG    // get this   
B2                XXZ

与上例中的情况类似;假设每个员工都有一个独特的CubeNo,我想找到分配给多个员工的CubeNo。

我可以使用以下查询获得结果;但我确信有更优雅的方式来实现这一目标。感谢所有的建议..

var idealList = (from g1 in Emp
   join g2 in Emp on g1.CubeNo equals g2.CubeNo 
        where g1.EmpId  != g2.EmpId  
        select new
        {
           Property1 = g1.EmpId ,
           Property2 = g2.CubeNo  
        }).ToList();

1 个答案:

答案 0 :(得分:0)

ListOfObject.GroupBy(x=>x.Property1)
              .Where(x=>x.Count()>1)
              .Select(x=>x.GroupBy(y=>y.Property2)
              .Where(t=>t.Count()==1))
              .Where(x=>x.Any())
              .SelectMany(x=>x.SelectMany(t=>t))

我有样本课:

public class Class1
{
    public string Property1 {get;set;}
    public string Property2 {get;set;}
}

var ListOfObject = new List<Class1>
{
    new Class1{Property1 = "A1", Property2 = "X1"},
    new Class1{Property1 = "B1", Property2 = "Y1"},
    new Class1{Property1 = "A1", Property2 = "Z1"},
    new Class1{Property1 = "B1", Property2 = "Y1"},
};

enter image description here