C# 如何使用join添加额外属性
如果我有一个实体:C# 如何使用join添加额外属性,c#,entity-framework,join,C#,Entity Framework,Join,如果我有一个实体: class Post { [ Key ] public int PostID { get; set; } public string Title { get; set; } public string Body { get; set; } public string Comment { get; set; } public virtual Project Project { get; set; } ... pu
class Post
{
[ Key ]
public int PostID { get; set; }
public string Title { get; set; }
public string Body { get; set; }
public string Comment { get; set; }
public virtual Project Project { get; set; }
...
public bool LikedByUser; // Append this property
}
public class PostLike
{
public int PostLikeID { get; set; }
public virtual Post Post { get; set; }
}
是否有一种方法可以在调用数据库时进行连接,并将最后一个属性(代码中提到的)附加为额外属性。。。例如,此代码很愚蠢(并且可能不起作用):
我想要这样的东西:
this.context.Posts
.Join(
this.context.PostLikes,
p => p.PostID,
pl => pl.Post.PostID,
( p, pl ) => {
p.LikedByUser = pl.Count > 0 ? true : false;
}
);
因此,一种方法是通过子查询:
var posts = this.context.Posts
.Select(p =>
new Post()
{
PostID = p.PostID,
Title = p.Title,
Body = p.Body,
Comment = p.Comment
Project = p.Project,
LikedByUser = this.context.PostLikes.Any(pl => pl.PostId = p.PostID)
});
如果该属性不是现有类的一部分,则可以投影为匿名类型,以便使用:
var posts = this.context.Posts
.Select(p =>
new {
Post = p,
LikedByUser = this.context.PostLikes.Any(pl => pl.PostId = p.PostID)
});
边栏:
pl.Count>0?true:false
可以缩短为仅pl.Count>0
.1。LikedByUser是类Post中不存在的属性吗?2.课后是部分的吗。正如你所看到的,LikeByUser是一个存在于类Post上的属性。我认为该属性不是classIs的一部分。有没有一种方法可以做到这一点而不必为它创建映射对象?
var posts = this.context.Posts
.Select(p =>
new {
Post = p,
LikedByUser = this.context.PostLikes.Any(pl => pl.PostId = p.PostID)
});