ASP.Net Core中IQueryable求和结果异常问题排查与解决
ASP.NET Core 数据求和异常问题排查与解决
问题背景
我们的ASP.NET Core解决方案基于SQL数据库,其中Thing对象可关联0至多个Item,每个Item记录对应类型的数量。需求是对指定Item类型的数量求和并返回至View,但实际求和结果与预期不符。
现有代码
控制器中的IQueryable定义
IQueryable<Item> items = _context.Items .Include(ep=>ep.ItemType) .Include(ep=>ep.ItemActionType) .Include(ep=>ep.Thing) .AsQueryable();
求和查询代码
int itemsum = (int)items.Where(ep => ep.ItemTypeId == 2 && ep.ItemActionTypeId == 8).Select(ep => ep.ItemQuantity).Sum();
数据情况
数据库中符合过滤条件(ItemTypeId=2且ItemActionTypeId=8)的条目如下:
Id ThingId ItemTypeId ItemActionTypeId ItemQuantity
1 100 2 8 2
2 100 2 8 1
3 103 2 8 1
4 103 2 8 1
5 105 2 8 1
理论求和结果应为6,但实际返回值为3。
解决方案
在IQueryable定义之后、求和操作之前,添加基于Thing对象日期范围的过滤逻辑,代码如下:
items = items.Where(e => e.Thing.ThingDateTime >= searchThings.FromDateTime && e.Thing.ThingDateTime <= searchThings.ToDateTime);
添加该过滤条件后,求和操作结果恢复正常。
内容的提问来源于stack exchange,提问作者jimd12
相关产品推荐
相关产品推荐

