簡體   English   中英

LINQ:在GROUPBY和SELECT之后WHERE子句不起作用

[英]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( .. )
                )
            );

現在,我們實現了所需的功能,首先進行過濾(最內部調用),然后對數據進行分組。

希望這可以幫助。 此外,您可以閱讀查詢關鍵字以獲取有關groupwhere子句的更多詳細信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM