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

时间:2016-03-17 16:31:02

标签: c# entity-framework linq linq-to-entities

这是我的问题,现在是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; }
}

所以一个用户有一个他正在追随的Tipster的集合,而推荐者可以推下注,所以他们有赌注的集合,并且赌注只有一个创造它的推特。

我正在使用Entity Framework开发WEB API,我想使用Linq to Entity来执行此操作:

通过ID获取用户,包括其中visible == true的提示者集合,包括他们创建但正在过滤这些的提示,状态=“待定”。

我可以过滤提示者可见状态, 使用.Any() 要么 使用

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

但我不知道如何过滤我的子实体(推荐者)的子实体(投注)。

2 个答案:

答案 0 :(得分:0)

试试这个。可能是更优雅的方式:

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();

答案 1 :(得分:-2)

假设表格之间存在关系:

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

应该做的工作