Entity Framework 6 在执行 where 子句时强制转换继承对象

Entity Framework 6 cast inheritance object when doing where clause

假设我有评论 table, 管理员和会员可以对其发表评论。 Admin 和 Member 继承自 User, 所以现在我想通过成员 (groupName)

的特定属性获得评论和过滤
public class User
{
    [Key]
    public int id { get; set; }
    public string name { get; set; }
    public string type { get; set; } //member or admin
}
public class Admin : User
{
    public string someProp { get; set; }
}
public class Member : User 
{
    public string groupName { get; set; }
}
public class Comment
{
    [Key]
    public int id { get; set; }
    public string msg { get; set; }
    [ForeignKey("user")]
    public int user_id { get; set; }

    public virtual User user { get; set; }
}

var comments = db.comments.Where(c => c.user.type == "member" && c.user.groupName == "abc").ToList(); 

当然上面的代码不能工作, 所以对我有什么想法吗?

试试这个:

var comments = db.comments.Where(c =>
    c.user is Member &&
    (c.user as Member).groupName == "abc"
);

此外,如果您公开关联的另一端(用户 -> 评论),可能会容易得多:

public abstract class User
{
    [Key]
    public int id { get; set; }
    public string name { get; set; }
    public string type { get; set; } //member or admin

    public virtual ICollection<Comment> Comments { get; set; }
}

然后:

var comments = db.users
                 .OfType<Member>()
                 .Where(x => x.groupName == "abc")
                 .SelectMany(x => x.Comments);

P.S我冒昧把你的Userclass标记为abstract