首先,我从数据库中获得了未分组的借方。
var groupingData = await adminService.GetDebitsGrouping();
然后,我要根据付款类型(汇款或非汇款)对借方进行分组。
//Grouping non-remittance records
var groupedCustomerList = groupingData
.GroupBy(u => new { u.MemberId, u.CurrencyType, u.AccountToPay, u.SortCodeOrBIC })
.Select(grp => new DebitsGroupingViewModel
{
PaymentOutId = grp.FirstOrDefault().PaymentOutId,
Sector = grp.FirstOrDefault().Sector,
MemberId = grp.FirstOrDefault().MemberId,
MemberName = grp.FirstOrDefault().MemberName,
SupplierName = grp.FirstOrDefault().SupplierName,
AccountToPay = grp.FirstOrDefault().AccountToPay,
SortCodeOrBIC = grp.FirstOrDefault().SortCodeOrBIC,
Transactions = grp.Sum(x => x.Transactions),
TotalToPay = grp.Sum(x => x.TotalToPay),
CurrencyType = grp.FirstOrDefault().CurrencyType,
ClientCurrency = grp.FirstOrDefault().ClientCurrency,
AccountName = grp.FirstOrDefault().AccountName,
SupplierId = grp.FirstOrDefault().SupplierId,
SupplierTypeId = grp.FirstOrDefault().SupplierTypeId,
PayTypeMasterId = grp.FirstOrDefault().PayTypeMasterId,
ClientReferenceNumber = grp.FirstOrDefault().ClientReferenceNumber
})
.Where(x => x.PayTypeMasterId.GetValueOrDefault() != -1)
.ToList();
但是似乎WHERE
子句无法正常工作。它也包括一些非汇款记录。
在询问之前,我也尝试过搜索网络,但找不到正确的原因/答案。
注意:所有非汇款记录的ID均不是-1。
答案 0 :(得分:4)
在LINQ to对象中,该语句直接转换为一系列方法调用:
执行以下操作时:
var result = myData.GroupBy( .. ).Select( .. ).Where( .. ).ToList();
这被翻译成这样:
var result = Enumerable.ToList(
Enumerable.Where(
IGrouping.GroupBy( .. )
)
);
这不是我们想要的。我们要过滤myData
,然后对其进行分组,而不是对数据进行分组,然后对其进行过滤。因此,当您更改顺序时:
var result = myData.Where( .. ).GroupBy( .. ).Select( .. ).ToList();
这被翻译成这样:
var result = Enumerable.ToList(
IGrouping.GroupBy(
Enumerable.Where( .. )
)
);
现在,我们正在实现所需的功能,首先进行过滤(最内部调用),然后对数据进行分组。
希望这会有所帮助。此外,您可以阅读Query Keywords以获得有关group
和where
子句的更多详细信息