2016-03-17 86 views
1

這是我的問題,現在是1h我正在網上搜索,找不到解決方案。Linq to Entity:添加過濾器到子實體的子實體

我有這些類:

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實體做到這一點:憑身份證

獲得用戶,其中包括英超的集合,其中可見==真,包括他們的賭注創建但過濾這些,狀態=「掛起」。

我可以過濾英超可見狀態,使用.Any() 或 使用

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

但我不知道如何過濾我的子實體(英超)的子實體(賭注)。

+0

'context.Entry(tipster)....'? –

+0

但也看看這裏:https://github.com/jcachat/EntityFramework.DynamicFilters –

回答

-2

假設表之間的關係都存在:

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

應該做的工作

+0

你不能在EF中做條件包含。 –

+0

我的不好。而我現在看到我錯了。這是關於過濾賭注,而不是提示。 var data = dbcontext.UserDataset.Include(u => u.Tipsters.Select(t => t.Bets.Where(b => b.State == something))); – TSungur

+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

EF不允許自定義投影到實體類 –

+0

確切的,沒有工作,我只是現在就嘗試...我仍然在爲解決方案而激怒:( –

+0

嘗試我更新的答案。它應該讓你,如果你使用AsQueryable ToList() –