我經常需要用領域,如publishStart
,publishEnd
限制進行選擇,active
LINQ的擴展方法
我有幾個不同的表這些字段。因此,只有行應該被選中,是
a: active == true;
b: publishStart < now;
c: publishEnd > now;
因此,舉例來說:
db.myTable.SingleOrDefault(a => (a.ID == _theID
//now the active and start-end part:
&& ((a.publishEnd > DateTime.Now) || (a.publishEnd == null))
&& ((a.publishStart <= DateTime.Now) || (a.publishStart == null))
&& a.active == true));
這是一個有點冗長,所以我不知道是否有可能創建一個 - 方法(擴展名?)像:
db.myTable.SingleOrDefault(a => (a.ID == _theID).isActive()
其中isActive()
提供了3行以上的片段。
我該怎麼做? 有沒有更好的辦法來清理代碼?
這些都在單獨的表中,對嗎?上下文中沒有顯示單個表?我問,因爲你在序言中指出,屬性在單獨的表格上,而在過濾器中只使用一個上下文。如果他們都在同一張桌子上,這很容易,如果他們在不同的桌子上,它會大大改變正確的答案。 – casperOne
在這種情況下,您需要在**'SingleOrDefault'之前調用'IsActive' **,以便它可以在只取一個之前過濾活動項目,除非只有一個項目具有該ID。 – Servy