2013-05-29 85 views
1

我已經使用通用的respository/uow模式設置了EF 4.3。如何在此實體框架Linq語句中添加where子句

一個典型的方法是這樣的:

using (var uow = new UnitOfWork(ConnectionString.PaydayLenders)) 
{ 
    var r = new CrudRepo<Tier>(uow.Context); 
    return r.Find() 
    .Include("CommissionTiers.MatchService.Provider") 
    .ToList(); 
} 

正如你所看到的,我還包括在獲取使用導航屬性等表。

在此示例中,層具有多個CommissionTiers,CommissionTiers具有MatchService,MatchService具有提供者。

我希望能夠做到的是選擇CommissionTier.Status = 1和Provider = 1的位置。有沒有一種方法可以將其納入此聲明/方法?

+0

包括只是渴望加載。你確定你需要它嗎? –

+0

EF更可嘲弄,linq2sql是,我會質疑爲什麼使用通用庫/ uow的原因,它在大多數情況下增加了不必要的抽象。另一方面,如果Find()返回IQueryable,則應該可以使用導航屬性來執行所需的操作。 – Giedrius

+1

@omerschleifer - 那麼如果我不使用它,我仍然會回到CommissionTiers等的數據庫 – dotnetnoob

回答

-1

您可以使用Join來獲得所需的功能。因爲你在的地方沒有必要明確地在你的LINQ聲明加入導航性能

Where(t => t.CommissionTiers 
      .Any(ct => ct.Status == 1 && ct.MatchService.Provider == 1)) 

2

試試這個。

+0

應該在哪裏(t => t.CommissionTier.Any(...' –

+0

@WiktorZychla:謝謝,固定 –

+0

@DanielHilgarth - 不太理想的結果當我標記提供者狀態時,只有所選提供者的最後一層被刪除而不是全部3層 – dotnetnoob