LINQ检查嵌套集合中的重复项

时间:2014-06-27 14:03:27

标签: .net linq lambda

我有一个集合Col1,其中每个集合都有一个集合Col2

我想知道任何Col2是否有重复的Value,并且仅在Col2.Type= "AType"时才会知道。

Col1    Col2    Type    Value
Col1a   Col2a   AType   10
Col1a   Col2b   BType   10
Col1a   Col2c   AType   15
Col1b   Col2a   AType   10
Col1b   Col2b   Ctype   20
Col1b   Col2c   Atype   30

^将返回false,在Col2中没有重复的AType

Col1    Col2    Type    Value
Col1a   Col2a   AType   10 << Dupe
Col1a   Col2b   BType   15
Col1a   Col2c   AType   10 << Dupe
Col1b   Col2a   AType   10
Col1b   Col2b   Ctype   20
Col1b   Col2c   Atype   30

^将返回true

3 个答案:

答案 0 :(得分:3)

bool anyDups = Col1
    .Any(c1 => c1.Col2
        .Where(c2 => c2.Type == "AType")
        .GroupBy(c2 => c2.Value)
        .Any(g => g.Count() > 1));

答案 1 :(得分:1)

 var result = list.Where(a=>a.Type =="AType").
            GroupBy(p => p.Type).Select(group => group.First());

答案 2 :(得分:0)

通常我会做类似

的事情
var correctTypeValues = Col1.Where(c => c.Type= "AType").Select(c => c.Value);
if(correctTypeValues.Count() == correctTypeValues.Distinct().Count())
{
  // no dups
}

虽然基于IsUnique()扩展方法:

if(Col1.Where(c => c.Type= "AType").Select(c => c.Value).IsUnique())
{
  // no dups
}