[英]LINQ : WHERE clause not working after GROUPBY AND SELECT
首先,我從數據庫中獲取借方(非分組)。
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。
在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( .. )
)
);
現在,我們實現了所需的功能,首先進行過濾(最內部調用),然后對數據進行分組。
希望這可以幫助。 此外,您可以閱讀查詢關鍵字以獲取有關group
和where
子句的更多詳細信息
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.