以下查询产生 Object reference not set to an instance of an object.
var results = products.SelectMany(x => x.features)
.GroupBy(x => new { x.Category })
.Select(x=> new features
{
Category = x.Key.Category,
amount = x.Sum(x=>x.amount)
});
同时检查结果
at System.Linq.Enumerable.SelectManySingleSelectorIterator`2.MoveNext()
at System.Linq.Lookup`2.Create(IEnumerable`1 source, Func`2 keySelector, IEqualityComparer`1 comparer)
at System.Linq.GroupedEnumerable`2.GetEnumerator()
at System.Linq.Enumerable.SelectEnumerableIterator`2.ToArray()
at System.Linq.SystemCore_EnumerableDebugView`1.get_Items()
这意味着我不能执行空检查
if(results == null)
{
}
甚至
if(!results.Any())
{
}
我应该如何处理这种“内部”异常?我想知道我的查询是否包含结果。
答案 0 :(得分:1)
根据堆栈跟踪,您在 Category
或 amount
中有空值。所以修复很简单:
var results = products.SelectMany(x => x.features)
.Where(x => x.Category != null)
.GroupBy(x => new { x.Category })
.Select(x=> new features
{
Category = x.Key.Category,
amount = x.Sum(x=>x.amount ?? 0)
});