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"
});

ステートメントの実行後、「Types in Union or Concat cannot be built with hierarchy」というメッセージが表示されます。各本に表示するカテゴリのリストを取得できるようにする必要があります。誰かが可能な解決策に光を当てることができれば、それは大歓迎です。

4

1 に答える 1

1

問題は、結合するクエリでサブシーケンスを選択していることです (つまりb.BookCategories)。これは LINQ 2 SQL の制限です。これを SQL に変換することはできません (実行するのが非常に難しいため、チームはこれをサポートしないことを選択したと思います)。

サブシーケンスの選択を取り除きます。おそらく、この場合の最も簡単な修正は、クライアント側でユニオンを実行することです。2 つのサーバー側クエリを実行し、結果をマージします。

シーケンスがサブ選択されている場合、パフォーマンスはとにかくひどいものになります。L2S を使用してツリーを効率的にフェッチする方法を調査することをお勧めします。

于 2012-10-07T21:35:20.160 に答える