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 中的类型”,我需要能够获得要与每本书一起显示的类别列表。如果有人能对可能的解决方案有所了解,将不胜感激。

4

1 回答 1

1

问题是您在合并的查询中选择一个子序列(即b.BookCategories)。这是 LINQ 2 SQL 限制。它无法将其转换为 SQL(因为它很难做到,所以我猜团队选择不支持它)。

摆脱子序列选择。在这种情况下,最简单的解决方法可能是执行联合客户端。执行两个服务器端查询并合并结果。

无论如何,性能都会很糟糕,因为如果序列子选择。您可能想研究如何以有效的方式使用 L2S 获取树。

于 2012-10-07T21:35:20.160 回答