Filtering data after BaseQuery (entity framework)

Всем привет У меня есть некий базовый запрос к базе данных. После получения ответа нужно применить фильтр для LedgerAccountTypeId

Вот мой код с запросом

public IEnumerable<GroupedRoomRevenue> GetGroupedRoomRevenue(ReportRequest reportRequest, DateRange bookingDateRange, NetSalesGroupBy groupBy)
        {
            var failedTransactionStatus = (int)TransactionStatus.Failed;
            var voidTransactionStatus = (int)TransactionStatus.Void;

            var baseQuery = _reportsDbContext.Reservations.AsNoTracking()
                .Join(_reportsDbContext.LedgerTransactions.AsNoTracking(),

                reservation => reservation.ReservationId,
                ledgerTransactions => ledgerTransactions.ReservationId,
                (reservation, ledgerTransactions) => new { reservation, ledgerTransactions }).
                Where(w =>
                w.reservation.ClientId == reportRequest.ClientId &&                       //active reservation
                w.reservation.PropertyId == reportRequest.PropertyId &&
                !_reservationStatus.Contains(w.reservation.StatusId) &&

                //w.ledgerTransactions.LedgerAccountTypeId == LedgerAccountType.RoomCharge  &&           //check it
                w.ledgerTransactions.DateEffective < bookingDateRange.End || bookingDateRange.End == null &&         
                w.ledgerTransactions.DateEffective >= bookingDateRange.Start || bookingDateRange.Start == null &&
                w.ledgerTransactions.TransactionStatusId != voidTransactionStatus &&
                w.ledgerTransactions.TransactionStatusId != failedTransactionStatus &&
                w.reservation.StatusId != ReservationStatus.Deleted &&
                w.reservation.StatusId != ReservationStatus.Quote &&
                w.reservation.StatusId != ReservationStatus.Maintenance &&
                w.reservation.StatusId != ReservationStatus.GroupBlocked &&
                w.ledgerTransactions.FolioStatusId != FolioStatus.Deleted
                );

            var roomRevenue = NetSalesAccountType.RoomRevenue;

            return baseQuery.Select(s => new GroupedRoomRevenue
            {
                GroupByValue = groupBy,
                Date = s.ledgerTransactions.DateEffective,
                NetSalesAccountType = roomRevenue,
                Amount = s.ledgerTransactions.Amount
            }).ToList();
        }

Закомментированная строка это как раз и будет тот фильтр по которому необходимо отфильтровать этот базовый запрос.

w.ledgerTransactions.LedgerAccountTypeId == LedgerAccountType.RoomCharge

Ещё один момент, что на выходе я возвращаю объект, поэтому фильтрацию нужно произвести после выполнения самого метода. То есть смысл в том чтобы произвести запрос к бд, а потом для разных методов применять фильтры к этому базовому запросу. Я пытался сделать вот так, но что-то я не совсем уверен

public Task<IEnumerable<NetRevenue>> GetNetRevenues(ReportRequest reportRequest, NetSalesGroupBy groupBy)
        {
            var roomRevenue = GetGroupedRoomRevenue(reportRequest, reportRequest.DateRange, groupBy, LedgerAccountType.RoomCharge);
            var filteredRoomRevenue = roomRevenue.Where(x => x.LedgerAccountType.Equals(LedgerAccountType.RoomCharge)).
                Select(s=>s.Amount).FirstOrDefault();
            var otherRevenue = GetGroupedRoomRevenue(reportRequest, reportRequest.DateRange, groupBy, LedgerAccountType.Incidental);
            var filteredOtherRevenue = otherRevenue.Where(x => x.LedgerAccountType.Equals(LedgerAccountType.Incidental) ||
            x.LedgerAccountType.Equals(LedgerAccountType.Fee)).Select(s=>s.Amount).FirstOrDefault();

            //var roomRevenueAmount =

            var netRev = new NetRevenue
            {
                RoomRevenue = filteredRoomRevenue,//filteredRoomRevenue.Select(s => s.Amount),
                OtherRevenue = filteredOtherRevenue,//filteredOtherRevenue.Select(s => s.Amount),
                TotalRevenue = filteredRoomRevenue + filteredOtherRevenue
            };

            return netRev;
        }

Ответы (0 шт):