Linq to Entity:将过滤器添加到子实体的子实体

这是我的问题,现在是1h我在网上搜索,找不到解决方案。

我有这些类:

public class User
{  
    public string Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Tipster> Tipsters { get; set; }
}

public class Tipster
{
    public string Id { get; set; }
    public string Name { get; set; }
    public bool Visible { get; set; }
    public virtual ICollection<Bet> Bets { get; set; }
}

public class Bet
{
    public string Id { get; set; }
    public string Name { get; set; }
    public string State { get; set; }
    public virtual Tipster Tipster { get; set; }
}

因此,用户有一组他正在关注的提示器,推介者可以推注,因此他们有投注集合,并且一个投注只有一个提示器来创建它。

我正在使用实体框架开发WEB API,并且我想要使用Linq to Entity来完成此操作:

按ID获取用户,其中包括可见== True的提示器集合,包括他们创建的投注,但用State =“pending”过滤这些投注。

我可以使用.Any()或using来过滤Tipsters Visible状态

context.Entry(user).Collection( c => c.Tipsters ).Query(...)

但我不知道如何过滤我的子实体(提示器)的子实体(投注)。


尝试这个。 可能是更优雅的方式来做到这一点:

var result = (from user in users
                select new User
                {
                    Id = user.Id,
                    Name = user.Name,
                    Tipsters = user.Tipsters.Where(x => x.Visible).Select(y => new Tipster
                    {
                        Id = y.Id,
                        Name = y.Name,
                        Visible = y.Visible,
                        Bets = y.Bets.Where(z => z.State == "Pending").Select(b => new Bet
                        {
                            Id = b.Id,
                            Name = b.Name,
                            State = b.State
                        }).AsQueryable()
                    }).AsQueryable()
                }).AsQueryable();

假设表格之间存在关系:

var data=dbcontext.UserDataset.Include(u => u.Tipsters.Where(t => t.Visible));

应该完成这项工作

链接地址: http://www.djcxy.com/p/37657.html

上一篇: Linq to Entity : add filter to child entities of child entities

下一篇: Linq group by parent property order by child