【问题标题】:Xelement Linq with Null value?具有 Null 值的 Xelement Linq?
【发布时间】:2015-07-15 08:13:06
【问题描述】:

我尝试获取所有Xelement值并插入数组,但是当Xelement为null时,插入数组时会显示如下错误:

对象引用未设置为对象的实例。

是否可以删除空值?或者用非空值替换空值?请给我建议。

数据库中 XML 格式的我的节点(第三个值为空):

<AnswerData><Answer1>a1</Answer1><Answer2>a2</Answer2><Answer3></Answer3></AnswerData>

我的控制器:

int z = 0;
string[] multiresultanswer = new string[choicesubqarray.Count()];

for (int x = 0; x < multiresultanswer.Count(); x++)
{
    XElement RateAns =
        (from node in qconfig.Elements("Answer" + (x + 1))
            select node).SingleOrDefault();

    // Error when store 3rd value ====> multiresultanswer[z++] = RateAns.Value;       
 }

【问题讨论】:

标签: c# xml linq linq-to-xml


【解决方案1】:

我认为你这样工作会更容易:

string[] multiresultanswe = Enumerable
    .Range(1, choicesubqarray.Count())
    .Select(x => (from node in qconfig.Elements("Answer" + x)
               select node).SingleOrDefault())
    .Where(x => x != null)
    .Select(x => x.Value)
    .ToArray();

这需要获取答案范围 (Enumerable.Range),将数字列表更改为所需结果 (Select),省略空值 (Where),将其转换为值 (Select ),并将结果放入数组 (ToArray)。

您还可以通过将(from node in qconfig.Elements("Answer" + x) select node).SingleOrDefault() 更改为具有相同作用的qconfig.Elements("Answer" + x).SingleOrDefault() 来改进它。

【讨论】:

  • 完美!这是我想要的!谢谢!
【解决方案2】:

你好像误解了SingleOrDefault的意思。

SingleOrDefault 如果没有找到任何元素,则返回null。因此,对于(RateAns == null),在您的XML 中没有给定数字的答案。因此,没有什么可删除的。

【讨论】:

    【解决方案3】:
    string xml = @"<AnswerData><Answer1>a1</Answer1><Answer2>a2</Answer2><Answer3>null</Answer3></AnswerData>";
    XElement root = XElement.Parse(xml);
    int count = 5;
    var query = from n in Enumerable.Range(1, count)
                join e in root.Elements() on n.ToString() equals e.Name.LocalName.Substring(6) into g
                from e in g.DefaultIfEmpty()
                select e == null ? null : e.Value == "null" ? null : e.Value;
    foreach (var q in query)
    {
        Console.WriteLine(q == null ? "NULL VALUE" : q);
    }
    

    你想跳过元素的值为null字符串的地方

    【讨论】:

      【解决方案4】:

      您必须检查当前XElementValue 属性是否为NULL

      var rateAns = qconfig.Elements("Answer" + (x + 1)).Where(el => el.Value != null));
      

      因此您不需要对 NULL 值进行任何进一步处理,因此您的 RateAns == null 已过时,因为您的查询不返回任何 NULL 元素。

      【讨论】:

      • 如何将值添加到数组中?
      猜你喜欢
      • 2018-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多