我正在尝试将
.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);