【发布时间】:2020-12-24 22:56:38
【问题描述】:
我有 3 张桌子,Notices、Users 和 Likes。如果用户喜欢此通知,我想获取所有带有用户名和信息的通知。
到目前为止,我有这段代码,但它多次返回一个通知(每个喜欢一个):
return context.notices
.GroupJoin(context.Users, notice => notice.CreatedBy, user => user.Id, (notice, users) => new { notice, users })
.SelectMany(group => group.users.DefaultIfEmpty(), (group, user) =>
new
{
group.notice,
user
})
.GroupJoin(context.Likes, noticeDto => noticeDto.notice.Id, like => like.ItemId, (noticeDto, likes) => new { noticeDto, likes })
.SelectMany(group => group.likes.DefaultIfEmpty(), (group, like) =>
new NoticeDto
{
CreatedByName = (group.noticeDto.user == null ? "" : group.noticeDto.user.FullName),
Id = group.noticeDto.notice.Id,
Liked = like.CreatedBy == userId,
});
我也试过这个代码..但我得到一个错误:
return context.notices
.GroupJoin(context.Users, notice => notice.CreatedBy, user => user.Id, (notice, users) => new { notice, users })
.SelectMany(group => group.users.DefaultIfEmpty(), (group, user) =>
new
{
group.notice,
user
})
.GroupJoin(context.Likes, noticeDto => noticeDto.notice.Id, like => like.ItemId, (noticeDto, likes) => new { noticeDto, likes })
.Select((group) =>
new NoticeDto
{
CreatedByName = (group.noticeDto.user == null ? "" : group.noticeDto.user.FullName),
Id = group.noticeDto.notice.Id,
Liked = group.likes != null ? group.likes.Any(w => w.CreatedBy == userId) : false,
});
这是我得到的错误:
处理 LINQ 表达式 'DbSet .LeftJoin( 外部:数据库集 .AsQueryable(), 内部:notice => notice.CreatedBy, 外键选择器:用户 => 用户 ID, innerKeySelector: (notice, user) => new { 通知=通知, 用户 = 用户 }) .GroupJoin( 外部:数据库集, 内部:noticeDto => noticeDto.notice.Id, outerKeySelector: like => like.ItemId, innerKeySelector: (noticeDto, likes) => new { noticeDto = noticeDto, 喜欢=喜欢 })'
'NavigationExpandingExpressionVisitor' 失败。这可能表示 EF Core 中存在错误或限制。
谁能帮我实现我需要的东西?..谢谢。
通知
public Guid Id { get; set; }
public Guid CreatedBy { get; set; }
用户
public Guid Id { get; set; }
public string FullName{ get; set; }
喜欢
public Guid Id { get; set; }
public Guid CreatedBy { get; set; }
public Guid ItemId { get; set; }
【问题讨论】:
标签: sql entity-framework linq entity-framework-core linq-to-entities