簡體   English   中英

向linq-to-sql表添加默認的where子句

[英]Adding a default where clause to a linq-to-sql table

是否可以向Linq-to-SQL類生成的每個SQL語句添加默認的where子句?

我有一個帶有Customer類的自定義DataContext。 Customer類具有Deleted屬性,這是我希望在查詢表時始終為NULL屬性。

因此,例如,我可以寫:

List<Customer> customers = db.Customers.ToList<Customer>();

但真正得到:

List<Customer> customers = db.Customers.Where(o => o.Deleted == null).ToList<Customer>();

我想在數據庫中維護“已刪除”數據,但是永遠不需要在.NET代碼中看到它們。 這種默認設置很方便,因此我不必記住將過濾器添加到每個查詢中。

您可以添加一個名為ActiveCustomers的新屬性,該屬性返回以下內容:

public IQueryable<Customer> ActiveCustomers {
    get { return db.Customers.Where(e => e.Deleted == null); }
}

針對該屬性的任何查詢都可以指定其他Where條件並以其他方式修改結果,但是它們始終以尚未刪除的客戶開始 而且由於LINQ的執行延遲,因此該語句不會導致執行任何其他查詢。

如果您需要確保沒有人可以訪問db.Customers ,則可以嘗試通過以下操作將其隱藏(可能無法正常工作,我需要查看您的實現):

public new IQueryable<Customer> Customers {
    get {
      throw new InvalidOperationException("Use property ActiveCustomers instead.");
    }
}

無需將表添加到dbml設計器中,而是添加一個包含默認where子句的視圖,並僅在dbml中將視圖命名為Customer。

要允許更新,插入和刪除,請確保選擇DBML設計器中的主鍵列,並將其Primary Key屬性標記為true。

暫無
暫無

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

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