确定,
我有一个LinqToXml查询,它返回一条记录(正确的术语?),
但是,我不想使用for ..循环从查询中提取一条记录。有更简单的方法吗?
如果您找到更好的方式来编写查询(我还在学习),那么*奖励
我的xml文件:
<?xml version="1.0"?>
<!-- first draft of LibMappings.xml file -->
<LibMappings>
<File>
<Name>Foundation.dll</Name>
<Map>Lib\Foundation</Map>
</File>
</LibMappings>
我的代码:
private static string GetMapFor(string dllName)
{
//Opens Xml File and gets "Lib" map for dllName
string retVal;
XDocument libMapFile = XDocument.Load(_libMapFilePath);
//This query will return 1 record
IEnumerable<XElement> query = from c in libMapFile.Descendants("File")
where (string)c.Element("Name") == dllName
select c.Element("Map");
if (query.Count() == 1)
{
//there's only gonna be one here.. I might as well do this..
foreach (string x in query)
{
retVal = x;
break;
}
//I'd like to do this:
retVal = query[0];
}
return retVal;
}
答案 0 :(得分:4)
您要么寻找First或FirstOrDefault扩展方法。
这些方法将返回查询中的第一个元素。它们仅在查询结果为空时才会有不同的行为。 First方法将抛出异常,而FirstOrDefault将返回查询中元素类型的默认值(通常为null)。
var first = query.First();
答案 1 :(得分:1)
IEnumerable<XElement> query = from c in libMapFile.Descendants("File")
where (string)c.Element("Name") == dllName
select c.Element("Map");
XElement element = query.First();
return element.Value;
答案 2 :(得分:0)
试试这个:
选择c.Element(“Map”)。First();
或者,如果您不确定会得到结果:
选择c.Element(“Map”)。FirstOrDefault();
然后检查null以查看是否有结果。