如果两个变量不相等,则使Linq查询返回null

时间:2011-08-15 20:34:14

标签: c# .net xml linq

尝试使用这样的查询:

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小时。

4 个答案:

答案 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);