2012-10-07 34 views
1

我試圖運行非常類似於查詢構造如下:類型的聯盟或的毗連不能與層次

(from bs in DataContext.TblBookShelf 
join b in DataContext.Book on bs.BookID equals b.BookID 
where bs.BookShelfID == bookShelfID 
select new BookItem 
{ 
     Categories = String.Join("<br/>", b.BookCategories.Select(x => x.Name).DefaultIfEmpty().ToArray()), 
    Name = b.Name, 
ISBN = b.ISBN, 
BookType = "Shelf" 
}).Union(from bs in DataContext.TblBookShelf 
join bi in DataContext.TblBookInventory on bs.BookID equals bi.BookID 
    select new BookItem 
    { 
      Categories = String.Join("<br/>", bi.BookCategories.Select(x => x.Name).DefaultIfEmpty().ToArray()), 
      Name = bi.Name, 
     ISBN = bi.ISBN, 
     BookType = "Inventory" 
}); 

我收到了「在聯盟或Concat的類型不能與層次構建」後語句執行,我需要能夠獲得每本書顯示的類別列表。如果有人能夠闡明一個可能的解決方案,將不勝感激。

+0

DataContext:Linq2Sql或Linq2EF? –

+0

什麼是BookItem的基類? –

+0

Linq2Sql和BookItem是基類。 – user927777

回答

1

問題是,您正在選擇聯合查詢中的子序列(即b.BookCategories)。這是一個LINQ 2 SQL限制。它無法將其轉換爲SQL(因爲這很難做到,所以我猜這個團隊選擇不支持這個)。

擺脫子序列選擇。在這種情況下,最簡單的修復可能是執行聯合客戶端。執行兩個服務器端查詢併合並結果。

無論如何,性能將是可怕的,因爲如果序列子選擇。您可能想研究如何以有效的方式獲取L2S樹。