C# 如何获取存储在对象中的集合中的对象?
我正在尝试从数据库中检索帖子。Post具有连接集合,而连接具有对等对象。我想包括对等对象,其中PeerId等于传递的Id,但它返回连接集合中的所有对等对象。查询应该是什么样子C# 如何获取存储在对象中的集合中的对象?,c#,linq,C#,Linq,我正在尝试从数据库中检索帖子。Post具有连接集合,而连接具有对等对象。我想包括对等对象,其中PeerId等于传递的Id,但它返回连接集合中的所有对等对象。查询应该是什么样子 var posts = await context.Post.AsQueryable() .Include(u => u.Connections).ThenInclude(u => u.Peer) .Include(u => u.Connec
var posts = await context.Post.AsQueryable()
.Include(u => u.Connections).ThenInclude(u => u.Peer)
.Include(u => u.Connections).ThenInclude(u => u.Issuer).Include(u => u.Location)
.Include(u => u.Images)
.Where(c=>c.Creator.UserSettings.ShowMe == true
&&
c.Connections.Any(connection => connection.PeerId==id)) //this line
.OrderBy(item => item.Status)
.ThenByDescending(d => d.CreatedDate)
.ToListAsync();
public class Post
{
public long Id { get; set; }
public long CreatorId { get; set; }
public User Creator { get; set; }
public long LocationId { get; set; }
public virtual Location Location { get; set; }
public ICollection<Connection> Connections { get; set; }
public ICollection<Image> Images { get; set; }
public string Status { get; set; }
}
public class Connection
{
public long Id { get; set; }
public long IssuerId { get; set; }
public virtual User Issuer { get; set; }
public long PeerId { get; set; }
public virtual User Peer { get; set; }
public long PostId { get; set; }
public virtual Post Post { get; set; }
}
public class User
{
public long Id { get; set; }
}
var posts=await context.Post.AsQueryable()
.Include(u=>u.Connections)。然后Include(u=>u.Peer)
.Include(u=>u.Connections)。然后Include(u=>u.Issuer)。Include(u=>u.Location)
.包括(u=>u.Images)
.Where(c=>c.Creator.UserSettings.ShowMe==true
&&
c、 Connections.Any(connection=>connection.PeerId==id))//此行
.OrderBy(项=>item.Status)
.ThenByDescending(d=>d.CreatedDate)
.ToListAsync();
公营职位
{
公共长Id{get;set;}
公共长创建者ID{get;set;}
公共用户创建者{get;set;}
公共长位置ID{get;set;}
公共虚拟位置{get;set;}
公共ICollection连接{get;set;}
公共ICollection映像{get;set;}
公共字符串状态{get;set;}
}
公共类连接
{
公共长Id{get;set;}
公共长IssuerId{get;set;}
公共虚拟用户颁发者{get;set;}
公共长PeerId{get;set;}
公共虚拟用户对等{get;set;}
公共长PostId{get;set;}
公共虚拟Post{get;set;}
}
公共类用户
{
公共长Id{get;set;}
}
如果以ListAsync的形式获得结果,则不需要asqueryable。此查询将用于ef core 5:
var posts = await context.Post
.Include(u => u.Location)
.Include(u => u.Images)
.Include(u => u.Connections.Where(c=> c.PeerId==id))
.ThenInclude(u => u.Peer)
.ThenInclude(u => u.Issuer)
.Where(c=>c.Creator.UserSettings.ShowMe == true)
.OrderBy(item => item.Status)
.ThenByDescending(d => d.CreatedDate)
.ToListAsync();
要得到答案,您必须显示要包含在查询中的所有类。至少有主键和外键。@Sergey,我已经编辑了问题这能回答你的问题吗?