2014-06-20 35 views
4

有沒有辦法將內部查詢投入子類?實體框架在鑑別器上做的情況下

如果我將quering只有單一的子類,我會做

auctions.OfType<AuctionBid>().Where(auctionBid => auctionBid.AuctionBidProp) 

現在我想在類型的子類

auctions.Where(auction => 
    (auction is AuctionBid) && ((AuctionBid) auction).Prop == 1 
    || (auction is AuctionBuy) && ((AuctionBuy) auction).Prop == 1) 

做的情況下,有沒有辦法做到這一點?

當然,上面的代碼給出了一個錯誤:LINQ to Entities只支持投射EDM原語或枚舉類型。

+0

正在讀取所有(或某些)拍攝到內存中,然後在您的情況下使用LINQ一個可行的選項? –

+1

我寧願在數據庫端正確分頁。現在我添加了與鑑別器相同的映射字段,並將需要的屬性移動到基類。 – llapinski

回答

3

我看到的唯一選擇是單獨查詢子類型和連接結果:

auctions.OfType<AuctionBid>() 
     .Where(auctionBid => auctionBid.AuctionBidProp == 1) 
     .Cast<AuctionBase> 
     .Concat(auctions.OfType<AuctionBuy>() 
         .Where(auctionBuy => auctionBuy.AuctionBidProp == 1) 
       ) 
     .OrderBy(ab => ab.Prop1) 
     .Skip(pages * pageSize) 
     .Take(pageSize) 

,這將產生一個UNION ALL查詢。與手工製作的SQL相比,不是最有效的方法,但也許可以接受(您必須嘗試)。

+0

也許處理分頁的sproc是可行的,因爲你指出生成的查詢可能缺乏性能。 –

+0

顯然,這是最好的方法來做到這一點,並保持EF Linq語法。 – llapinski

相關問題