IQueryable 上的 EF Core Union 在应用客户端投影后无法转换集合操作

问题描述 投票:0回答:0

我正在尝试将

.Union
应用于两个
IQueryable<ReviewAndReleaseDto>
查询。不幸的是,当它到达联盟电话时,它失败了:

System.InvalidOperationException:应用客户端投影后无法转换集合操作。考虑在最后一次“选择”调用之前移动设置操作。

var dataSet1 = from f in _marketTransaction.GetDbSet()
    join c in _commodityRepository.GetDbSet() on f.CommodityId equals c.Id
    join p in _productRepository.GetDbSet() on c.ProductId equals p.Id
    join h in _hedgeAccountRepository.GetDbSet() on f.MarketAccount equals h.Account into gha
    from account in gha.DefaultIfEmpty()
    join con in _contractRepository.GetDbSet() on f.ContractId equals con.Id into contract
    from ct in contract.DefaultIfEmpty()
    join off in _offerRepository.GetDbSet() on f.OfferId equals off.Id into offer
    from of in offer.DefaultIfEmpty()
    join cusForCon in _customerRepository.GetDbSet() on ct.CustomerId equals cusForCon.Id into customerForContract
    from customerForCon in customerForContract.DefaultIfEmpty()
    join cusForOff in _customerRepository.GetDbSet() on of.CustomerId equals cusForOff.Id into customerForOffer
    from customerForOff in customerForOffer.DefaultIfEmpty()
    where f.IsActive == true && employeeLocations.Any(em => em.LocationId == ct.DeliveryLocationId || em.LocationId == of.DeliveryLocationId)
    select new ReviewAndReleaseDto(f.Id, customerForCon.FirstName, customerForCon.LastName, customerForCon.Number, f.CreatedOn, f.UpdatedOn, true, f.FuturesPrice, f.IsSell, f.MarketAccount,
        f.WasAcknowledge, f.PassFill, f.IsGtc, f.Expiration, f.Lots, f.WorkingLots, c.ProductId, p.Code, f.MarketPrice, f.FuturesMonth,
        f.MarketId, account.Name, f.InternalCode, f.Source == EMarketTransactionSource.Contract ? EMarketTransactionSource.Contract :
        f.Source == EMarketTransactionSource.Accumulation ? EMarketTransactionSource.Accumulation :
        f.Source == EMarketTransactionSource.Offer ? EMarketTransactionSource.Offer : EMarketTransactionSource.ExternalFill, f.Type == EMarketTransactionType.Market ? EMarketTransactionType.Market : EMarketTransactionType.Limit, f.Event == ETransactionEvent.Creation ? ETransactionEvent.Creation :
        f.Event == ETransactionEvent.Edition ? ETransactionEvent.Edition :
        f.Event == ETransactionEvent.Cancelation ? ETransactionEvent.Cancelation :
        f.Event == ETransactionEvent.Roll ? ETransactionEvent.Roll :
        f.Event == ETransactionEvent.Book ? ETransactionEvent.Book :
        f.Event == ETransactionEvent.RollBack ? ETransactionEvent.RollBack :
        f.Event == ETransactionEvent.PartiallyFilled ? ETransactionEvent.PartiallyFilled :
        f.Event == ETransactionEvent.Filled ? ETransactionEvent.Filled : ETransactionEvent.Completed, f.State.Value == EMarketTransactionState.Ready ? EMarketTransactionState.Ready :
        f.State.Value == EMarketTransactionState.Denied ? EMarketTransactionState.Denied :
        f.State.Value == EMarketTransactionState.Pending ? EMarketTransactionState.Pending :
        f.State.Value == EMarketTransactionState.Working ? EMarketTransactionState.Working :
        f.State.Value == EMarketTransactionState.PartiallyFilled ? EMarketTransactionState.PartiallyFilled :
        f.State.Value == EMarketTransactionState.Filled ? EMarketTransactionState.Filled :
        f.State.Value == EMarketTransactionState.Canceled ? EMarketTransactionState.Canceled :
        f.State.Value == EMarketTransactionState.Rejected ? EMarketTransactionState.Rejected :
        EMarketTransactionState.Expired);

var dataSet2 = from f in _offerMonitoringRepository.GetDbSet()
    join o in _offerRepository.GetDbSet() on f.OfferId equals o.Id
    join c in _commodityRepository.GetDbSet() on o.CommodityId equals c.Id
    join p in _productRepository.GetDbSet() on c.ProductId equals p.Id
    join cusForOf in _customerRepository.GetDbSet() on o.CustomerId equals cusForOf.Id
    where f.Action.Value == EOfferMonitorAction.Add && employeeLocations.Any(el => o.LocationId == el.LocationId)
    select new ReviewAndReleaseDto(f.Id, cusForOf.FirstName, cusForOf.LastName, cusForOf.Number, f.CreatedOn, f.UpdatedOn, false, o.FuturesPrice ?? 0, !o.IsSell, 0,
        false, false, o.Gtc, o.Expiration, (int)(o.Quantity / c.LotFactor), 0, c.ProductId, p.Code, o.FreightPrice, o.FuturesMonth,
        "", "", o.InternalCode, EMarketTransactionSource.Offer, EMarketTransactionType.Limit, f.Action.Value == EOfferMonitorAction.Cancel ? ETransactionEvent.Cancelation :
        f.Action.Value == EOfferMonitorAction.Add ? ETransactionEvent.Creation : ETransactionEvent.Edition, EMarketTransactionState.Pending);

var query = dataSet1.Union(dataSet2);
asp.net-core entity-framework-core iqueryable
© www.soinside.com 2019 - 2024. All rights reserved.