c# - linq where 子句导致异常

标签 c# linq

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

x.AddedToFinal 为 bool 值且 ql.Fragments 不为空 此 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),但这是不可能的,因为该字段是一个非空 bool 值,而且这不是一个数据库对象,它是一个列表

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

.....

          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 本身不为空,但枚举中的一个元素为空。我猜这本身就是一个问题,但您可以将语句修改为:

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

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

关于c# - linq where 子句导致异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6818540/

相关文章:

c# - 如何包装 Entity Framework 以在执行前拦截 LINQ 表达式?

linq列表字符串像

c# - 'System.Net.HttpWebRequest' 不包含 'GetRequestStream' 的定义

c# - 控件和页面中的相同属性

sql - 按新指南排序以获得随机顺序

c# - IEnumerable <List <DataRow >>不包含ToList()的定义

c# - 全部执行,虽然列表是空的

c# - 状态代码 405,不允许使用 PUT 和 DELETE 操作方法

javascript - 是否可以将 MVC C# List<int> 转换为 javascript 数组?

c# - 如何将表格动态插入到另一个表格的表格单元格中?