var nextItem = ql.Fragments.Where(x => x.AddedToFinal.Equals(false));
Run Code Online (Sandbox Code Playgroud)
x.AddedToFinal是bool,ql.Fragments不为null这个linq语句偶尔会得到这个异常:
System.NullReferenceException:未将对象引用设置为对象的实例.
System.Linq.Enumerable.Count [TSource](IEnumerable1 source)中的System.Linq.Enumerable.WhereListIterator1.MoveNext()
有一个问题已经应该回答这个问题(linq where子句和count结果为null异常)但这是不可能的,因为该字段是一个非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);
}
Run Code Online (Sandbox Code Playgroud)
ql.Fragments本身不为null,但枚举中的一个元素为null.我猜这本身就是一个问题,但你可以将语句修改为:
var nextItem = ql.Fragments.Where(x => x != null &&
x.AddedToFinal.Equals(false));
Run Code Online (Sandbox Code Playgroud)
虽然这并没有解决为什么集合中的一个元素开头为null的问题.