正在获取系统.使用GroupBy和匿名类的OverflowException



有一个自定义class A,属性为NameAmount

有一个嵌套的List A迭代列表。

为了获得每个唯一的List A及其总量、计数等,我使用以下代码:`

public void GetStatistic()
{
var result = NestedListofListA.SelectMany(iteration => iteration)
.GroupBy(a => a.Name)
.Select(a => new
{
a.Key,
Count = a.Count(),
Amount = a.Sum(a => a.Amount),
Min = a.Min(a => a.Amount),
Max = a.Max(a => a.Amount)
})
.OrderBy(a => a.key);            
}

`问题是,如果嵌套列表计数超过300万次迭代,我会得到

System.OverflowException: 'Arithmetic operation resulted in an overflow.'

AmountMinMax在只有300万次迭代的情况下肯定不会超过int.MaxValue,我不确定是什么导致了问题。

我可以通过从嵌套列表创建一个唯一的a列表来解决这个问题

var uniqueAList = NestedListofA.SelectMany(list => list).DistinctBy(a => a.Name).ToList();

然后使用嵌套的foreach来获得相同的统计数据,但代码更大、更慢

我试图将匿名类属性显式转换为long,以确保问题与之无关,但这对没有帮助

更新:通过以下修复程序,代码正在工作:

Amount = a.Sum(a => (long)a.Amount)

感谢用户@vivek nuna

您必须检查生成的查询。在您的情况下,SUM溢出。因此,如果不需要,您可以在Amount = a.Sum(a => a.Amount),行上进行注释。

因此,在像Amount = a.Sum(a => (long)a.Amount一样将Amount分配给Amount之前,将其声明为long并将其种姓为long

感谢用户@vivek nuna,现在问题解决了:

金额=a.总和(a=>(长)a。金额)

相关内容

  • 没有找到相关文章

最新更新