【问题标题】:linq query and nullslinq 查询和空值
【发布时间】:2011-05-28 23:10:51
【问题描述】:

我想用 linq 查询一些 xml 文件。有一些必需元素和一些可选元素。唯一需要的是名称 - 其他所有内容都是可选的。 如果有一些 NULL 例如cageCode = NULL - 它不选择任何东西 - 我需要添加到字符串列表 - “” - 我尝试如下,但它不起作用。当我把所有东西都填满时,它工作正常,当有一些 NULL 时,它不会保存列出任何东西。 你能帮我如何设置“”来列出空元素的位置吗? 谢谢!

var queryManufacturer = from dataManufaturer in input.Identification.Manufacturers.Manufacturer
                                                select
                                                new
                                                { 
                                                    dataManufaturer.name,
                                                    dataManufaturer.cageCode,
                                                    dataManufaturer.FaxNumber,
                                                    dataManufaturer.URL.OriginalString
                                                };

                foreach (var a in queryManufacturer)
                {
                    data.Add(a.name);
                    if (a.cageCode == null) data.Add("");
                    else data.Add(a.cageCode);
                    if (a.FaxNumber == null) data.Add("");
                    else data.Add(a.FaxNumber);
                    if (a.OriginalString == null) data.Add("");
                    else data.Add(a.OriginalString);
                }

如果 xml 文件中的某些元素丢失,它会抛出一个空异常 - 我不想得到这个异常 - 我只想在丢失的元素旁边添加空字符串

【问题讨论】:

  • 顺便说一句,您可以使用不那么冗长的 data.Add( a.FaxNumer ?? "") 来代替所有那些 if/else。查找空合并运算符。

标签: c# xml linq


【解决方案1】:

在你的 Linq to XML 查询中试试这个:

select new
{ 
  name = dataManufaturer.name ?? "",
  cageCode = dataManufaturer.cageCode ?? "",
  FaxNumber  = dataManufaturer.FaxNumber  ?? "",
  OriginalString = dataManufaturer.URL!=null ?  dataManufaturer.URL.OriginalString : ""
};

【讨论】:

  • @the_drow:好吧,我也会使用 String.Empty 纯粹是出于惯例,但它们确实指向与 "" 被实习的相同的空字符串实例。没有功能上的区别,所以我很感兴趣你为什么这么关心。
  • @EdS.:只是一个编码约定。 Resharper 也建议这样做。如果我看到他使用“”,我不会杀任何人:)
  • @the_drow:是的,这里也一样。如果我正在从事他们使用“”的项目,我也会很乐意这样做。
  • @the_drow:补充一点,在 .NET 的早期,有 不同,因为空字符串没有被保留,但情况并非如此现在有一段时间了。
  • @EdS.:不实习是什么意思?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-30
  • 1970-01-01
  • 2022-08-09
  • 1970-01-01
  • 1970-01-01
  • 2010-10-16
相关资源
最近更新 更多