有没有一种简单的方法可以使用linq过滤掉独特的元素?

时间:2013-08-16 08:23:34

标签: linq linq-to-xml

我有一个xml文档

<NumSet>
    <num>1</num>
    <num>2</num>
    <num>2</num>
    <num>3</num>
  </NumSet>

我希望显示出独特的元素,即1和3.而不是不同,这也会带来2。 怎么做?我必须使用群组吗?有没有简洁的方法呢?

4 个答案:

答案 0 :(得分:1)

听起来您需要Distinct GroupBy查询...请查看StackOverflow上的Need help on Linq with group by and distinct帖子。

答案 1 :(得分:1)

XElement xe = XElement.Parse(@"<NumSet><num>1</num><num>2</num><num>2</num><num>3</num></NumSet>");
var query = xe.Elements("num")
               .GroupBy(x => x.Value)
               .Where(x=>x.Count ()==1)
               .Select (x => x);

答案 2 :(得分:1)

您是对的,您可以使用GroupBy并使用Count() == 1过滤只有一个项目的群组:

 var output =  XDocument.Load(xmlFile)
                        .Descendants("num")
                        .Select(e => e.Value)
                        .GroupBy(x => x)
                        .Where(g => g.Count() == 1)
                        .Select(g => g.Key);

答案 3 :(得分:1)

要做你需要的我会说是的,你需要使用GrouBy,然后计算每个组中的元素,并返回只包含一个元素的元素。在代码中,这转换为:

var query = lst.GroupBy(x => x)
  .Where(x => x.Count() == 1)
  .Select(x => x.Key);