让单号相同的数据合并,统计数量和金额

时间:2024-04-02 21:51:13

如果下图所示,我们经常会遇到单号相同但是有几条不同的数据,那么这种情况下就需要让几条单号相同的数据合并成一条,并且让它的数量和金额统计相加就可以了。
让单号相同的数据合并,统计数量和金额
首先 需要查询出所有的单号,再把查询出来的所有的数据去掉重复的和空白的数据,得到的就是不重复的单号数据了。

var ReceiptsNum = (from tbReceiptsNum in myModels.PW_Receipts
where tbReceiptsNum.ReceState == State
select tbReceiptsNum.ReceiptsNum).ToList();

List strCount = new List();

foreach (string item in ReceiptsNum){
if (!strCount.Contains(item) && !string.IsNullOrEmpty(item))
{ strCount.Add(item);}
}

然后就是通过什么得到的不重复的单号去查询所有包含这个单号的数据出来,并且声明一个空的实体类出来(注意这里声明的实体类是空的,不需要给它赋值)。

var Linq = myModels.PW_Receipts.Where(L => L.ReceiptsNum == ReceiptsNums && L.ReceState == State).ToList();

List Linqs = new List();

Linqs = (from tbReceipts in myModels.PW_Receipts
where tbReceipts.ReceiptsNum == ReceiptsNums
orderby tbReceipts.ReceiptsID descending
select new ReceitsVo()).ToList();
通过for循环遍历上面的空的对象列表,再给你需要返回到页面显示的字段一个个赋值,并且让里面的数量和金额求和。
Linqs[j].ReceiptsDate = Linq.Where(L => L.ReceiptsID == ReceiptsID).Select(L => L.ReceiptsDate).Single().ToString();

Linqs[j].ReceState = State;

Linqs[j].ReceNumber = Linq.Where(L => L.ReceiptsNum == strCount[i]).Sum(L => Convert.ToInt32(L.ReceNumber)).ToString();

Linqs[j].ReceMenyer = Linq.Where(L => L.ReceiptsNum == strCount[i]).Sum(L => L.ReceMenyer);

其中的ReceNumber是数量的字段,它的值是上面查询出来的单号相同的所有的数据的数量的总和,Sum在代码中是求和的意思,括号里面的就是需要求和的数据。同理,ReceMenyer是金额的字段,也是通过查出需要相同单号的数据,再用Sum把其中的数据的金额的数据全部加在一起。
因为在上面的操作完成之后返回到页面的数据并不是单独的数据,而是一个单号有多条数据的那种,所以还需要在再进行下一步操作:判断里面的数据的单号是否重复,如果重复就只提取其中的一条返回到页面当中去,不重复就直接添加。
List Linqss = new List();
var LinqReceum = “”;

if (Linqss.Count!=0){
for (int k = 0; k < Linqss.Count; k++)
{ LinqReceum = Linqss[k].ReceiptsNum; }
}

foreach (var item in Linqs){
if (item.ReceiptsNum != null&&LinqReceum!=item.ReceiptsNum)
{ Linqss.Add(item);}
}
进行到这一步之后,重复并且是空白的数据已经并清除掉了,再接下来就是把这些数据返回到页面当中就可以了。
List list = Linqss.Skip(layuiTablePage.GetStartIndex()).Take(layuiTablePage.limit).ToList();
layuiTableData.count = Linqss.Count;
layuiTableData.data = list;

return Json(layuiTableData, JsonRequestBehavior.AllowGet);