Возвращать Guid из значения атрибута XLinq или Guid.Empty, если XElement / XAttribute не найден - PullRequest
0 голосов
/ 22 июня 2011

Я пытаюсь использовать Linq для получения Guid из значения XAttribute ...

XDocument __xld = XDocument.Parse(
"<Form sGuid='f6b34eeb-935f-4832-9ddc-029fdcf2240e'
 sCurrentName='MyForm' />");

string sFormName = "MyForm";

Guid guidForm = new Guid(

    __xld.Descendants("Form")
    .FirstOrDefault(xle => xle.Attribute("sCurrentName").Value == sFormName)
    .Attribute("sGuid").Value

);

Дело в том, что я хотел бы вернуть Guid.Empty, если XAttribute отсутствует или XElement не найден, (или что-то идет не так!) ...

Могу ли я однострочить эту концепцию или мне нужно сначала выполнить запрос, чтобы увидеть, был ли найден XElement с соответствующим sCurrentName и вернуть Guid.Empty, если запрос ничего не возвращает ...


UPDATE

Благодаря Miroprocessor у меня получилось следующее ...

Guid guidForm = new Guid(

    (from xle in __xld.Descendants("Form")
    where xle.Attribute("sCurrentName") != null && xle.Attribute("sCurrentName").Value == sFormName
    select xle.Attribute("sGuid").Value).DefaultIfEmpty(Guid.Empty.ToString()).FirstOrDefault()

 );

НО (!) Я думаю, что Guid.Empty.ToString () можно было бы избежать, если бы я мог создать Guid внутри запроса (если это возможно).

1 Ответ

1 голос
/ 22 июня 2011

1001 * попробовать *

 var guidForm =(from xle in __xld.Descendants("Form")
                 where xle.Attribute("sCurrentName").Value == sFormName
                 select new {Value = xle.Attribute("sGuid").Value==null?Guid.Empty:new Guid(xle.Attribute("sGuid").Value)}).Single();

поэтому для доступа к результату вы напишите guidForm.Value

или попробуйте это

 Guid guidForm =new Guid(from xle in __xld.Descendants("Form")
                 where xle.Attribute("sCurrentName").Value == sFormName
                 select xle.Attribute("sGuid").Value==null?Guid.Empty:xle.Attribute("sGuid").Value).Single());

но я не уверен, что будет работать правильно

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