簡體   English   中英

Linq to Entity:向子實體的子實體添加過濾器

[英]Linq to Entity : add filter to child entities of child 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集合,並且Tipsters可以推動下注,因此他們也有很多下注,而下注只有一個創建它的Tipster。

我正在使用Entity Framework開發WEB API,並且我想使用Linq to Entity來做到這一點:

按ID獲取用戶,包括在可見== true的提示集合,包括他們創建的投注,但使用State =“ pending”對其進行過濾。

我可以使用.Any()或使用來過濾Tipsters可見狀態

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

應該做的工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM