我应该如何处理 LINQ 内部异常?

时间:2021-02-03 15:30:20

标签: c# linq

以下查询产生 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())
{

}

我应该如何处理这种“内部”异常?我想知道我的查询是否包含结果。

1 个答案:

答案 0 :(得分:1)

根据堆栈跟踪,您在 Categoryamount 中有空值。所以修复很简单:

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)
    });