【发布时间】:2021-03-08 08:45:31
【问题描述】:
我正在尝试从数据库中获取展平对象,但出现错误。我想在数据库中获取所有类型的 2 本书,代码如下所示:
IQueryable<Book> query = _context.Books
.GroupBy(b => b.Genre)
.SelectMany(bc => bc.Select(b => b).Take(2));
有人知道我在这里做错了什么吗?
我得到了这个异常而不是结果:
无法翻译 LINQ 表达式“
bc => bc .AsQueryable() .Select(b => b) .Take(2)”。以可翻译的形式重写查询,或通过插入对“AsEnumerable”、“AsAsyncEnumerable”、“ToList”或“ToListAsync”的调用显式切换到客户端评估。有关详细信息,请参阅 go.microsoft.com/fwlink/?linkid=2101038。
我也尝试过类似的方法:
IQueryable<Book> query = _context.Genres.GroupJoin(
_context.Books,
g => g,
b => b.Genre,
(g, books) => new
{
Genre = g,
BookCollection = books
}
).SelectMany(bc => bc.BookCollection.Select(b => b)
.Take(2)).Include(b => b.Author).Include(b => b.Rating)
.Include(b => b.BookISBNs).Include(b => b.Reviews)
.ThenInclude(r => r.User);
【问题讨论】:
-
如果您告诉我们您认为自己做错了什么(或为什么您认为自己做错了什么),这可能会有所帮助。
-
您希望查询返回什么?
-
是的,当然,它给了我异常而不是结果:LINQ 表达式 'bc => bc .AsQueryable() .Select(b => b) .Take(2)' 不可能翻译。以可翻译的形式重写查询,或通过插入对“AsEnumerable”、“AsAsyncEnumerable”、“ToList”或“ToListAsync”的调用显式切换到客户端评估。请参阅go.microsoft.com/fwlink/?linkid=2101038 了解更多信息。
-
如果它给您异常,请始终在帖子中包含错误消息。
-
@Marta "我希望它返回 Book 对象的 IQueyrable。" -
_context.Books.AsQueryable()也会给你一个IQueryable<Book>。但你并不是真的想要那样。请明确说明(在帖子中)您期望的结果。
标签: c# entity-framework linq