是否有一种简单的方法可以返回FIRST LinqToXML结果?

时间:2009-07-09 23:04:48

标签: c# xml linq linq-to-xml

确定,

我有一个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;
}

3 个答案:

答案 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以查看是否有结果。