3
我有一個數據庫中有兩個表,非常相似的模式,需要以類似的方式查詢。我爲linq實體創建了一個部分類,然後讓這些類實現了一個接口IEvent,它定義了我需要的具有匹配簽名的所有屬性。所有這一切都很好,我可以將結果投給IQueryable,並使用相同的代碼處理來自多個源的數據。我無法弄清楚的是根據「DataSource」(即事件表)當前處於活動狀態來獲取表的一種很好的方式,所以目前我有這個令人討厭的switch語句,如果添加了另一個數據源,我將不需要更新,不喜歡它一點。任何人有什麼奇思妙想,它是晚在這裏和我的大腦失敗...:-S動態Linq.Table <TEntity>可能嗎?
的代碼是這樣的:
private IQueryable<IEvent> getEvents(IEnumerable<int> IDs)
{
var db = new EventDataContext();
// activeDataSource is an enum defined elsewhere
switch (activeDataSource)
{
case DataSource.Source1:
return db.Events1.Where(e => IDs.Contains(e.ID)).Cast<IEvent>();
break;
case DataSource.Source2:
return db.Events2.Where(e => IDs.Contains(e.ID)).Cast<IEvent>();
break;
}
}
嗨,這看起來正是我一直在尋找,但是當我tryed來實現它,我得到了在VS「T必須是引用類型才能使用它作爲一個參數‘TEntity’」以下錯誤。約束到像Event1這樣的作品,但是這種做法違背了目的。 :( – withakay
我給T添加了一個類約束。這意味着T可以是任何實現IEvent的類。 – jrummell
嗨,感謝您花時間回答,這是非常方便的東西,嚴格地說,您已經回答了我的問題所以我會給你信用的,我仍然面臨着決定T應該放在哪裏的問題,假設我想從配置文件中提取數據源,但我正在避免它,但是我正在考慮反思可能性 – withakay