选择我关注的用户的帖子

时间:2017-07-21 15:52:09

标签: asp.net asp.net-mvc linq

我有两种模式:

public class UserProfile {
     public int Id { get; set; }
     public virtual ICollection<UserProfile> Following { get; set; }
     public virtual ICollection<Post> Posts { get; set; }
}

public class Post {
     public int Id { get; set; }
     public virtual UserProfile { get; set; }
}

我想选择当前用户关注的所有用户帖子。它基本上就像显示您在社交网站上关注的人的帖子的摘要。我如何在linq中执行此操作?我得到了一个错误。

var following = CurrentUser.UserProfile.Following;
var posts = (from p in db.Posts
                      where following.Any(a=>a.Id == p.UserProfile.Id)
                      select new Post).ToList();

1 个答案:

答案 0 :(得分:1)

您可以使用导航属性获取结果:

var result=CurrentUser.UserProfile.Following.SelectMany(u=>u.Posts);

我认为问题在于您,因为您正在尝试将查询投影到实体类(Post)。在EF中,您只能将查询投影到匿名类型或DTO(自定义类)。

按照您的想法执行此操作的另一种方法是:

var following = CurrentUser.UserProfile.Following.Select(u=>u.Id);
var posts = (from p in db.Posts
                      where following.Contains(p.UserProfile.Id)
                      select p).ToList();

Contains扩展方法已转换为SQL中的IN