尝试使用这样的查询:
var checkName = from nn in xdoc.Root.Elements("string")
where nn.Attribute("id").Value.Equals(newTag)
select thisbool = true;
要查看在我的XML中是否存在节点string
,其中属性id
的值等于此字符串变量newTag
。如果不存在这样的string
节点,我想返回null,或者我可以使用下面的if语句检查的东西,以便我可以禁止进行特定的更改,即
if (thisbool)
{
MessageBox.Show("The string ID you entered is already in use. Please enter a different string ID.");
tagBox.Text = undoTag;
return;
}
这是我目前的设置。我还尝试选择nn
并使用if(nn != null)
,但似乎没有任何效果。如果这是一个新问题,我很抱歉 - 我正在进行一些时间紧缩,我确实试图找到答案并测试45分钟-1小时。
答案 0 :(得分:2)
此查询将只显示符合您条件的所有元素:
var checkName = from nn in xdoc.Root.Elements("string")
where nn.Attribute("id").Value.Equals(newTag)
select nn;
然后你的if语句就像检查是否存在任何这样的元素一样简单:
if (checkName.Any())
{
// Code if condition is met by any tag here
}
如果你真的需要一个bool
,你可以像这样组合查询:
bool anyMatches = xdoc.Root.Elements("string")
.Where(x => x.Attributes("id").Value.Equals(newTag)).Any();
最后,为了完整起见,您可以将谓词从Where()
移到Any()
:
bool anyMatches = xdoc.Root.Elements("string")
.Any(x => x.Attributes("id").Value.Equals(newTag));
我个人更喜欢前两种方法中的一种,因为我认为它们会更清楚地说明发生了什么。当然,由你喜欢的。
答案 1 :(得分:2)
bool thisbool = xdoc.Root.Elements("string")
.Any(e => e.Attribute("id").Value == newTag);
答案 2 :(得分:1)
就在我头顶
from n in source
let x = n.Prop1
let y = n.Prop2
select (x == y) ? value : null;
答案 3 :(得分:1)
bool anySuchElementExists
= xdoc.Root.Elements("string")
.Any(e => e.Attribute("id").Value == newTag);