具有子选择的实体框架查询
本文关键字:实体 框架 查询 选择 | 更新日期: 2023-09-27 18:37:28
我有一个场景,我有 3 个表:
-
新闻 [ID, 名称]
-
用户 [ID、名称]
-
喜欢 [ID, 新闻, 用户]
我正在尝试编写一个查询,该查询将返回所有新闻以及返回 true 或 false 的列(如果特定用户喜欢或不喜欢某个内容)。
在SQL上,我会像这样:
select *,
(select top 1 id from newslike nl where nl.newsid = n.id and nl.userid = 1)
from News n
如何使用 EF 查询实现此目的?
我已经向我的类添加了此布尔值的 NotMapped 属性
编辑:
public partial class News
{
public int Id { get; set; }
public virtual ICollection<NewsLike> NewsLike { get; set; }
[NotMapped]
public bool LikedByCurrentUser { get; set; }
}
public partial class NewsLike
{
public int Id { get; set; }
public int NewsId { get; set; }
public int UserId { get; set; }
public virtual News News { get; set; }
public virtual User User { get; set; }
}
News.Where(n => n.Likes.Any(l => l.UserId == userId));
此处userId
是所需用户的 ID。您将获得用户喜欢的所有新闻。
假设有一个从News
到'Likes的导航属性:
db.News.Select(
n => new {n.Id, n.Name, UserLikes = n.Likes.Any(l => l.userid == 1))}
);
由于如果用户喜欢内容,我有一个未映射的属性来存储 bool 值,我的查询是否可以返回新闻列表而不是匿名类型?
当然,只需创建一个新的News
项而不是匿名类型:
db.News.Select(
n => new News {
Id = n.Id,
Name = n.Name,
LikedByCurrentUser = n.NewsLike.Any(l => l.userid == currentUser))}
);