【发布时间】:2018-12-10 08:18:11
【问题描述】:
我有三张桌子:
材料:
- 身份证
- 标题
- 内容
喜欢:
- 身份证
- 材料 ID
- 用户 ID
- 喜欢
访客:
- 身份证
- 用户 ID
- 材料 ID
- 日期
- 立即阅读
我想得到一个像这样的对象:
- 标题
- 内容
- 点赞数
- CountVisitors
我尝试执行以下操作:
from mat in ctx.materials
let visitors = mat.VisitorsCollection.Where(x=>x.ReadNow).Count()
let likes = mat.LikesCollection.Where(x=>x.IsLiked).Count()
let iliked = mat.LikesCollection.Where(x=>x.UserID == myID && x.IsLiked).Any()
select new {
Material = mat,
Visitors = visitors,
Likes = likes,
Liked = iliked
}
我选择了一些材料,实体框架分别接收访问者数量等数据。
我还尝试了以下方法:
from mat in ctx.materials
join lik in ctx.Likes.Where(x=>x.UserID == myID && x.IsLiked) on map.ID equals lik.MaterialID
select new {
Material = mat,
Liked = lik.Any()
}
但现在出现错误:
Microsoft.EntityFrameworkCore.Query:警告:无法翻译 LINQ 表达式“Any()”,将在本地进行评估。
【问题讨论】:
-
试试
ctx.Likes.Any(x=>x.UserID == myID && x.IsLiked)是否有效。 -
@PeterB 感谢您的回答!不幸的是,如果我做 LikesCollection.Any (...) 那么什么都不会改变,我会收到很多单独的请求。
-
问题/问题是什么?第一个查询看起来是 EF 预期/推荐的连接方式。客户评价/N+1 次查询?请更新帖子。还要指定确切的 EF Core 版本,因为它真的很重要。
-
@IvanStoev 感谢您的回答。我回答了先驱报的回答。拜托,我在那里写了问题所在。问题是我有上面指出的其他数据。结果,我收到了 100 个请求而不是 1 个。
标签: c# sql-server entity-framework linq entity-framework-core