3
我有三個表:如何篩選嵌套關係
public class A
{
[Key]
public int Id {get; set;}
public virtual ICollection<B> Bs {get; set;}
}
public class B
{
[Key]
public int Id {get; set;}
public int AId {get; set;}
[ForeignKey("AId")]
public virtual A A {get;set;}
public virtual ICollection<C> Cs {get;set;}
}
public class C
{
[Key]
public int Id {get; set;}
public int BId {get; set;}
[ForeignKey("BId")]
public virtual B B {get;set;}
}
我想要做的是得到的將只有已加載BS A記錄,這將反過來被過濾,以過濾列表只返回也將被過濾的Cs列表(Cs的列表將只包括一個記錄)。我知道這聽起來有點令人困惑,但也許看看我試過的代碼會有點意義。
這裏是我目前:
int cId = 123;
var filtered = aRepo.GetAll() // returns dbContext.Set<A>()
.Where(a => a.Bs
.Where(b => b.Cs
.Where(c => c.Id == cId).FirstOrDefault() != null
).FirstOrDefault() != null
).ToList();
這種方法的問題是,一旦我找到了一個匹配的C,B被加載與被映射到B所有的CS的名單,而B和A也是如此。我可以理解爲什麼會發生這種情況,但我似乎無法弄清楚如何以某種方式做到這一點,以便只有一個C被加載,並且只有那些映射到C被加載。
任何幫助將不勝感激,謝謝。