【问题标题】:How do you add extra property using join如何使用 join 添加额外的属性
【发布时间】:2015-06-08 13:07:59
【问题描述】:

如果我有一个实体:

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,
        // This is the bit that can't be right!
        ( p, pl ) => new Post()
        {
            PostID = p.PostID,
            Title = p.Title,
            Body = p.Body,
            Comment = p.Comment
            Project = p.Project,
            LikedByUser = pl.Count > 0 ? true : false
        }
    );

我想要这样的东西:

this.context.Posts
    .Join( 
        this.context.PostLikes,
        p => p.PostID,
        pl => pl.Post.PostID,
        ( p, pl ) => {
            p.LikedByUser = pl.Count > 0 ? true : false;
        }
    );

【问题讨论】:

  • 侧边栏:pl.Count > 0 ? true : false 可以缩短为 pl.Count > 0
  • 1. LikedByUser 是 Post 类中不存在的属性吗? 2. IS 类 Post 部分?
  • 1.如您所见,LikeByUser 是 Post 类中存在的一个属性。

标签: c# entity-framework join


【解决方案1】:

所以 - 您可以这样做的一种方法是通过子查询:

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)
    });

【讨论】:

  • 我认为该属性不是类的一部分
  • 有没有办法不用为其创建映射对象?
猜你喜欢
  • 2010-12-20
  • 1970-01-01
  • 2014-02-14
  • 2017-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-12
  • 1970-01-01
相关资源
最近更新 更多