3
public static MapFrom Map(this IDataReader idr, params string[] columns)
{
return new MapFrom { Columns = columns };
}
public static IEnumerable<TEntity> To<TEntity>(this MapFrom from, Func<TEntity, object> map)
{
// logic here.
}
public IEnumerable<FooEntity> Execute()
{
using (DbCommand cmd = db.GetStoredProcCommand("GetListOfFoo"))
{
using (IDataReader idr = db.ExecuteReader(cmd))
{
return idr.Map("FooID", "FooOfPooAmount", "AnotherFooColumn", "BarID")
.To<FooEntity>(x => new object[]{
x.FooID, x.FooOfPooAmount, x.AnotherFoo, x.BarID
});
}
}
}
我希望帶一個數據讀取器,並創建一個易於使用且性能卓越的簡單映射器。我沒有使用表情樹,但我覺得他們可能需要。我想要做的是檢查x的關係到它的數組(lambda表達式),然後使用此關係自動映射值並創建一個新的Foo Entiti列表。使用表達式樹進行映射?有沒有可能實現這一點?
MapFrom只是一個攜帶信息並允許流暢的擴展方法的容器。
這些雜技的要點是有一個簡單的方法來指定關係。我意識到我可以輕鬆地以不同的形式做類似的事情,但我希望能夠「流利地」列出列[1](例如,在列名中輸入字符串,然後輸入逗號和下一列名),然後列出對象按順序排列屬性並從中推斷映射。它有可能實現上面的方法到?表達式樹在這裏適合嗎?我想我可以很容易地推斷從FooEntity屬性類型的數據閱讀器字段的類型轉換。
[1]在這方面,我的意思並不是說流利如「流利的API」
爲什麼你想重新發明輪子? :) 你開始寫一個ORM,這不是一個好主意。 –
我熟悉的ORM太重了。我想要的東西重量輕,接近於手動滾動 - 只是冗餘和不必要的噪音消除。我見過的ORM有不受歡迎的約束 - 性能,與C#邏輯混合的SQL等等。 –