2011-06-22 1 views
0

Я пытаюсь использовать Linq, чтобы получить Guid от стоимости XAttribute ...Возврат Guid Из XLinq значения атрибута, или если Guid.Empty XElement/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

попробовать

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()); 

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

+0

Спасибо, но Я думал, что могу использовать DefaultIfEmpty (Guid.Empty) где-то, но я не могу получить свою hea о том, как это будет написано! – user597118

+0

Я редактирую свой ответ, проверяю его –

+0

Я использовал ваш пример и обновил свой вопрос ... спасибо – user597118

Смежные вопросы