我想添加一個方法,它將爲我的項目中的實體創建一個IEnumerable。所有的實體都有一個下拉呈現的捕獲/編輯,所以在我看來,將它添加到我的通用存儲庫方法是有意義的。創建一個通用類中給定類型T的IEnumerable <SelectListItem>集合
我不太清楚,如果這是可行的,或如何最好地處理這一點,因爲我使用泛型類,希望下面這段代碼出售我的想法:
public interface ISpaceRepository<T>
where T : class
{
SpaceResult<T> GetAll();
SpaceResult<T> FindBy(Expression<Func<T, bool>> predicate);
SpaceResult<T> Add(T entity);
SpaceResult<T> Delete(T entity);
SpaceResult<T> Edit(T entity);
SpaceResult<T> FindById(int id);
SpaceResult<T> SelectList();
}
非常基本的接口定義。這得到我SpaceRespository類實現:
public class SpaceRepository<T>
: ISpaceRepository<T> where T : class
{
// content omitted for ease of reading
}
在我的倉庫,我想在這裏建立一個,將建立起來了IEnumerable收集方法,對於類型T的問題是,默認情況下,牛逼不公開任何屬性,所以我不能讓T.Name和T.Id,所以我有一個謂語玩弄於完成工作:
public SpaceResult<T> SelectList(Expression<Func<T, bool>> predicate)
{
SpaceResult<T> result = new SpaceResult<T>();
try
{
result.SelectList = this.GetAll().Select(predicate);
}
catch (System.Exception ex)
{
result.IsError = true;
result.Message = ex.Message;
result.InnerException = ex.InnerException.Message;
}
return result;
}
這種方法的工作原理,但我必須界定謂詞每次我構建一個選擇項目集合以綁定到Razor(MVC)中的下拉列表。
有沒有更簡單的方法?反思太昂貴。沒有特別的理由不在視圖模型層次上做這件事,我只是在學習:$時玩弄幾個想法。
更新
的想法是展現,將創建SelectListItem元素的集合T的給定的數據庫實體存儲庫模式中的一個通用的方法,而不必我和另一個開發複製的代碼數據庫中的每個表。
更新1
一個例子:
ISpaceRepository<Building> _repo = new SpaceRepository<Building>();
SpaceResult<Building> result = this._repo.SelectList((x => new SelectListItem {
x.Id,
x.Description }));
更新2
大廈看起來是這樣的:
[Table("buildings")]
public class Building
{
[Column("id")]
[Key]
public int Id {get;set;}
[Column("description")]
public string Description {get;set;}
}
所以在想,也許如果我添加一個自定義屬性到我在選擇列表中需要的列,我可以使用反射,但這對於我之後的解決方案而言聽起來很昂貴。
[Table("buildings")]
public class Building
{
[Column("id")]
[Key]
[SelectListItem]
public int Id {get;set;}
[Column("description")]
[SelectListItem]
public string Description {get;set;}
}
「這在我的SpaceRespository類中得到了繼承:」 - nitpick:由於'ISpaceRepository'是一個接口,它在* SpaceRepository類中被實現。 –
2015-04-02 11:52:52
:$謝謝你,是的 – JadedEric 2015-04-02 11:53:30
你能展示一個示例性謂詞函數嗎? 「T」的不同類型是否有共同的祖先,它可以提供所有可能的類型「T」共有的屬性? – 2015-04-02 11:54:28