C# linq查询和空值

C# linq查询和空值,c#,xml,linq,C#,Xml,Linq,我想用linq查询一些xml文件。有一些必需元素和一些可选元素。唯一必需的是名称-其他所有内容都是可选的。 如果有一些空值,例如cageCode=NULL-它没有选择任何内容-我需要添加到字符串列表-“”-我像下面那样尝试过,但它不起作用。当我把所有的东西都填好后,它工作正常,当有空的东西时,它不会保存以列出任何东西。 您能帮助我如何将“”设置为列表中的空元素吗? 谢谢 var queryManufacturer = from dataManufaturer in input.Identific

我想用linq查询一些xml文件。有一些必需元素和一些可选元素。唯一必需的是名称-其他所有内容都是可选的。 如果有一些空值,例如cageCode=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文件中的某些元素丢失,它会抛出一个空异常-我不想得到这个异常-我只想在丢失的元素旁边添加空字符串

在Linq to xml查询中尝试以下操作:

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

另外,您可以使用不太详细的
data.Add(a.FaxNumer???)
而不是所有那些if/else。查找空合并运算符。@the_-drow:好吧,我会使用String.Empty,也完全不符合惯例,但它们确实指向与
相同的空字符串实例。“
被插入。这里没有功能上的区别,所以我很感兴趣的是为什么您看起来如此关心它。@EdS:只是一个编码约定。Resharper也建议这样做。如果我看到他使用“”:)我不会杀任何人。卓尔:是的,这里也一样。如果我正在做一个他们使用“”的项目,我也会很乐意这样做。@the_-drow:更进一步,在.NET的早期,有一个区别,因为空字符串没有被拘留,但现在已经有一段时间了。@EdS:你说不被拘留是什么意思?