所以,我有一小块尖刺的尖头xml看起来像这样:
<Groups UseGroup='True'>
<Group>1264,182,1979</Group>
</Groups>
我有一小块linq可以从中获得价值:
var group = from a in xml.Descendants("Groups")
select a.Element("Group").Value;
一切都很好,但是我不知道如何处理空响应?如果我使用:
if(group != null)
它总是会评估true
,因为那里有一些东西。如果我使用:
if(group.ToString() == "")
它将始终评估为true,因为调用该对象的ToString()返回System.Linq.Enumerable + WhereSelectEnumerableIterator`2 [System.Xml.Linq.XElement,System.String]出于某种原因,我很难过将我的结果从我的linq查询转换为字符串,所以我使用var,因为这似乎是我能让它工作的唯一方法...
所以问题是,我使用正确的linq语法,如果是这样,我怎么判断它是否返回了什么?
答案 0 :(得分:2)
我不确定埃里克为什么把他的答案作为评论发布,但他是对的。您的条件语句应为:
if (group.Any())
如果您的XML没有“Groups”标签,那么Any()
将评估为false。
您可以将group
视为查询所有匹配项的序列。在你的例子中,只有一个匹配,但这只是意味着它只是一个只有一个值的IEnumerable。要获得该值,您可以:
string groupVal = group.FirstOrDefault();
这将返回第一个匹配,如果没有匹配则返回空字符串。如果您希望只有一个结果,则可以使用Single()
,如果结果为零或多,则需要抛出异常。还有First()
和SingleOrDefault()
方法,其行为与您预期的一样。