我有一个XML文档有没有简单的方法来过滤使用linq的独特元素?
<NumSet>
<num>1</num>
<num>2</num>
<num>2</num>
<num>3</num>
</NumSet>
我想露面独特的元素,即1和3未不同这也将带出2 如何做到这一点?我必须使用Group吗?有没有简明的方法来做到这一点?
我有一个XML文档有没有简单的方法来过滤使用linq的独特元素?
<NumSet>
<num>1</num>
<num>2</num>
<num>2</num>
<num>3</num>
</NumSet>
我想露面独特的元素,即1和3未不同这也将带出2 如何做到这一点?我必须使用Group吗?有没有简明的方法来做到这一点?
你是对的,你可以使用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);
听起来好像你想要一个Distinct
GroupBy
查询...看看在这里StackOverflow Need help on Linq with group by and distinct后。
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);
要做到你需要什么,我会说,是的,你需要使用GrouBy,然后计算每个组中的元素,并返回仅包含一个元素的元素。在代码中,这将转化为:
var query = lst.GroupBy(x => x)
.Where(x => x.Count() == 1)
.Select(x => x.Key);
所以语法必然很复杂。如果我想加入与另一个查询,我应该先使用GroupJoin或过滤然后加入? –
我不会说这很复杂:)想想它的作用:它将元素分组,计算每个组中有多少个元素,并返回只有一个结果的元素。对于第二个问题......它取决于你想要加入的查询,但可能是最好的问题,在一个新的问题。 – Save
SO用户,如果您打算downvote,*请*解释您为什么向用户做了这件事,以便他们可以从错误中学习。否则,他们不知道他们的错误是什么。我个人不知道为什么这是被拒绝的......这很短,但完全可以理解。 – Sheridan
@Sheridan - 我完全同意。谁低估可能是因为没有显示任何代码(即没有显示的尝试),但我希望SO会实施一个系统,迫使downvoters发表评论,所以至少人们可以学习(如果原因是有效的)。 – Tim