Возвращаясь в LINQ to XML - PullRequest
0 голосов
/ 23 мая 2011

Я работаю с методом, использующим LINQ to XML для возврата строки. Это XML

       <data name="lnkViewResultResource1.Text" xml:space="preserve">
    <value>View results</value>
  </data>
  <data name="lnkVoteResource1.Text" xml:space="preserve">
    <value>Vote</value>
  </data>
  <data name="number of results" xml:space="preserve">
    <value>You already {0} voted in this poll {1}</value>
  </data>

(я хочу получить атрибут "name") Это мой метод:

    Public Shared Function getlabel(ByVal filename As String, ByVal valuetrans As String) As String
    Dim label = From l In XElement.Load(filename).Elements("data") Where l.Element("value").Value = valuetrans Select (l.Attribute("name").Value).First
    Return label.ToString
End Function

И это возвращает это:

System.Linq.Enumerable + WhereSelectEnumerableIterator`2 [System.Xml.Linq.XElement, System.String]

Я гуглил и использовалпо этой ссылке FirstOrDefault (), но в моем случае это не сработало.Есть идеи?

Заранее спасибо,

Альф.

Ответы [ 3 ]

1 голос
/ 23 мая 2011

Вы также можете сделать это по-своему, но вы должны обернуть весь запрос linq в скобки, чтобы правильно выполнить первое:

Public Shared Function getlabel(ByVal filename As String, ByVal valuetrans As String) As String
        Dim label = (From l In XElement.Load(filename).Elements("data") 
        Where l.Element("value").Value = valuetrans 
        Select l.Attribute("name").Value).First
        Return label.ToString
End Function
1 голос
/ 23 мая 2011

Я думаю, что ваш звонок на «Первый» сделан неправильно, попробуйте это:

Dim query = From l In XElement.Load(filename).Elements("data") _ 
     Where l.Element("value").Value = valuetrans _
     Select (l.Attribute("name").Value)
Dim label = query.First()
Return label.ToString()
0 голосов
/ 23 мая 2011

Я думаю, что проще использовать цепочку:

var result = XElement.Load(filename).Elements("data")
    .First(l => l.Element("value").Value == valuetrans )
    .Attribute("name")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...