c# - 元素不存在时返回空字符串

标签 c# xml lambda asp.net-4.5

我正在使用以下查询将 XML 转换为结构。如果某个元素不存在,我将如何在以下查询中适应它(ClntCde 将始终存在,但 Title 有可能不存在)

ClientTbl ClientData = clientNode.Select(x => new ClientTbl
    {        
        ClientCode = x.Elements().Where(e => e.Name.LocalName == "ClntCde").FirstOrDefault().Value,
        //Title = x.Elements().Where(e => e.Name.LocalName == "Title").ToString(),
        //Title = x.Elements().Where(e => e.Name.LocalName == "Title").FirstOrDefault().Value,
        //Title = x.Elements("Title").FirstOrDefault().Value,                                                            
    }
).First();

XML:

<Client xmlns="http://www.website.co.za/namespace">
    <ClntCde>0000013</ClntCde>
    <Surname>Account Holder Surname</Surname>
    <Address>
         <Addr1>.</Addr1>
         <Addr2>.</Addr2>
         <Addr3>.</Addr3>
         <Addr4>.</Addr4>
         <PostCde>2000</PostCde>
    </Address>
    <ClntAccTyp>A</ClntAccTyp>
    <ElecInd>NO</ElecInd>
    <Lang>ENG</Lang>
</Client>

最佳答案

您可以使用 DefaultIfEmpty("") :

ClientCode = x.Elements()
    .Where(e => e.Name.LocalName == "ClntCde")
    .Select(e => e.Value)
    .DefaultIfEmpty("")
    .First(),
Title = x.Elements()
    .Where(e => e.Name.LocalName == "Title")
    .Select(e => e.Value)
    .DefaultIfEmpty("")
    .First(),
// ...

请注意,如果您自己提供默认值,则 ...OrDefault 是多余的。调用 FirstSingle 是安全的(仍然可以在多个元素上抛出),因为它永远不会为空。

关于c# - 元素不存在时返回空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19031598/

相关文章:

java - 转换 Java 函数式接口(interface)

c# - SQLite 连接未出现在实体数据模型向导中

java - 如何拥有一个可扩展的CardView?

c# - XML 树生成

c# - Entity Framework 结合来自不同实体的 lambda 表达式

java - 为什么这个 lambda 表达式使用 & 符号转换?

C# MySQL - 2 个查询之间的差异

c# - Aspx页面中的foreach循环如何添加复选框和标签

c# - Entity Framework 未填充键

javascript - jQuery AJAX 和 XML 获取节点值