返回Guid From XLinq属性值,如果找不到XElement/XAttribute,则返回Guid.Empty

本文关键字:返回 Guid XAttribute Empty XElement 如果 XLinq 属性 From 找不到 | 更新日期: 2023-09-27 18:00:06

我正在尝试使用Linq从XAttribute值中获取Guid。。。

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

问题是,如果XAttribute丢失,或者XElement找不到,(或者出了问题!),我想返回Guid.Empty。。。

我可以对这个概念进行一次线性化吗?或者我需要先执行查询,看看是否找到了一个具有匹配的sCurrentName和返回Guid的XElement。如果查询什么都不返回,则为空。。。


更新

感谢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(如果可能的话),我认为可以避免Guid.Empty.ToString()。

返回Guid From XLinq属性值,如果找不到XElement/XAttribute,则返回Guid.Empty

尝试

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

但我不确定它是否能正常工作