我有两种模式:
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();
答案 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