加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – linq where子句导致异常

发布时间:2020-12-16 01:45:50 所属栏目:百科 来源:网络整理
导读:var nextItem = ql.Fragments.Where(x = x.AddedToFinal.Equals(false)); x.AddedToFinal是bool,ql.Fragments不为null 这个linq语句偶尔得到这个例外: System.NullReferenceException: Object reference not set to an instance of an object. at System.Li
var nextItem = ql.Fragments.Where(x => x.AddedToFinal.Equals(false));

x.AddedToFinal是bool,ql.Fragments不为null
这个linq语句偶尔得到这个例外:

System.NullReferenceException: Object reference not set to an instance
of an object.

at System.Linq.Enumerable.WhereListIterator1.MoveNext() at
System.Linq.Enumerable.Count[TSource](IEnumerable1 source)

有一个问题已经应该回答这个问题(linq where clause and count result in null exception)但是这是不可能的,因为该字段是一个非null的布尔值,这不是一个数据库对象它是一个列表

刚刚添加:
我填充列表的代码是多线程的.不同的片段在从db中检索项目后将项目添加到列表中:

…..

xe = XElement.Parse(result);
          XmlFragment xf = new XmlFragment();
          xf.Fragment = xe;
          xf.LetterQueueOID = lq.LetterQueueOID;
          xf.ParentGroupNodeName = ParentGroupNodeName;
          xf.LinkingField = GroupNode.LinkingField;
          xf.GroupNodeName = GroupNode.GroupNodeName;

          lock (queuedLetters[lqOID])
          {
            if (lq.Fragments == null)
                lq.Fragments = new List<XmlFragment>();
            lq.Fragments.Add(xf);
          }

解决方法

ql.Fragments本身不为null,但枚举中的一个元素为null.我猜这本身就是一个问题,但你可以将语句修改为:

var nextItem = ql.Fragments.Where(x => x != null && 
                                       x.AddedToFinal.Equals(false));

虽然这并没有解决为什么集合中的一个元素开头为null的问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读