linq查询并再次为空

时间:2011-05-29 08:30:26

标签: c# xml linq null

  

可能重复:
  linq query and nulls

如果缺少xml文件中的某些元素,则抛出一个null异常 - 我不想得到这个异常 - 我想在缺少元素旁边添加空字符串列表数据

InstrumentDescription inputFile = InstrumentDescription.Load(openFileDialog1.FileName);    
var queryManufacturer = from dataManufaturer in 
                                  inputFile.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);
    }

我试过像这样的somenthing - 但它不起作用

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

如果缺少某些元素,我希望有一个空字符串,而不是异常。


我解决了它!!!

在选择中我只使用select new { dataManufacturer }而不是这些所有可能的元素,当我添加到列表时只测试例如dataManufacturer.name是否为null

2 个答案:

答案 0 :(得分:1)

我将在这里发布这个“评论”作为CW,以帮助您找到解决问题根源的正确方向。

在这个代码块中,有太多可能导致空引用异常的原因。在另一个问题中查看您的回答,很明显您不知道如何找出问题所在。所以试试这个。这是您向我们展示的代码的重写形式,以便于找出null的位置。运行它以找出这种情况发生的位置,希望您能够自己修复它。如果没有,那么 与我们分享此测试的结果,以便我们更好地了解您的问题,并为您提供更好的答案,帮助您解决问题。

这假设您正在制作Windows窗体应用程序或WPF应用程序。

var dialog = openFileDialog1;
if (dialog == null)
{
    MessageBox.Show("openFileDialog1 is null");
}
var filename = dialog.FileName;
if (filename == null)
{
    MessageBox.Show("openFileDialog1.FileName is null");
}
InstrumentDescription input;
try
{
    input = InstrumentDescription.Load(filename);
}
catch (NullReferenceException e)
{
    MessageBox.Show("NullReferenceException in InstrumentDescription.Load():\n" + e.Message);
}
if (input == null)
{
    MessageBox.Show("inputFile is null");
}
var id = input.Identification;
if (id == null)
{
    MessageBox.Show("inputFile.Identification is null");
}
var mans = id.Manufacturers;
if (mans == null)
{
    MessageBox.Show("inputFile.Identification.Manufacturers is null");
}
var man = mans.Manufacturer;
if (man == null)
{
    MessageBox.Show("inputFile.Identification.Manufacturers.Manufacturer is null");
}
var i = 0L;
foreach (var dm in man)
{
    if (dm == null)
    {
        MessageBox.Show("dataManufaturer at index "+i+" is null");
    }

    if (dm.name == null)
    {
        MessageBox.Show("dataManufaturer.name at index " + i + " is null");
    }
    if (dm.cageCode == null)
    {
        MessageBox.Show("dataManufaturer.cageCode at index " + i + " is null");
    }
    if (dm.FaxNumber == null)
    {
        MessageBox.Show("dataManufaturer.FaxNumber at index " + i + " is null");
    }
    var u = dm.URL;
    if (u == null)
    {
        MessageBox.Show("dataManufaturer.URL at index " + i + " is null");
    }
    if (u.OriginalString == null)
    {
        MessageBox.Show("dataManufaturer.URL.OriginalString at index " + i + " is null");
    }
    i++;
}

答案 1 :(得分:0)

怎么样

var queryManufacturer = from dataManufaturer in input.Identification.Manufacturers.Manufacturer
where dataManufaturer != null
select {...}