Есть ли простой способ вернуть ПЕРВЫЙ результат LinqToXML? - PullRequest
0 голосов
/ 10 июля 2009

Хорошо,

У меня есть запрос 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 ]

4 голосов
/ 10 июля 2009

Вы ищете метод расширения First или FirstOrDefault.

Эти методы вернут первый элемент в запросе. Они отличаются только поведением, когда результат запроса пуст. Метод First генерирует исключение, в то время как FirstOrDefault возвращает значение по умолчанию для типа элемента в запросе (обычно ноль)

var first = query.First();
1 голос
/ 10 июля 2009
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;
0 голосов
/ 10 июля 2009

Попробуйте это:

выберите элемент c.Element («Карта»). First ();

или, если вы не уверены, что получите в результате:

выберите элемент c.Element ("Карта"). FirstOrDefault ();

, затем проверьте нулевое значение, чтобы увидеть, есть ли у вас результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...