返回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()。
尝试
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());
但我不确定它是否能正常工作