0
我正在寫一個通用的實體Dto Mapper,我有一個問題。我想以編程方式描述映射。C#表達式部分解析。 Curring?
public void ById(Expression<Func<TDto, object>> propertySelector, Expression<Func<TEntity, TDto, bool>> expression) {
// Just the Setter what will be mapped
}
所以在我我叫ById函數並通過所需的表達式。在這種情況下,這種映射描述瞭如何獲取Entity.UserId等於Dto.Id的實體列表。
ById((x, y) => x.UserId.Equals(y.Id));
後端服務本身也是通用的並由「TDto」類型生成。後端服務已經包含了一個「Where」函數來加入一個函數。
public List<TEntity> Where<TEntity>(Func<TEntity, bool> predicate) {
ObjectSet<TEntity> Column = _getGenericColumnByType();
return Column.Where(predicate).ToList();
}
所以通常我會按以下方式調用我的後端。
GenericBackendService<TEntity> Service = // generateMyService;
Guid searchId = // my Guid im searching for
var result = Service.Where(x => x.Id.Equals(searchId));
現在出現了我的問題。有沒有辦法解決我的(x,y)=> x.UserId.Equals(y.Id)表達式的第二部分,並創建一個像這樣的func對象x => x.UserId.Equals(「123 -456-678「)?
public Func<TEntity, bool> MagicFunction(Expression<Func<TEntity, TDto, bool>> expression) {
//
// in -> (x, y) => x.UserId.Equals(y.Id)
//
// Do the magic
//
// out -> x => x.UserId.Equals("The Id I resolved from y.Id")
//
return function;
}
好吧,我明白了。然後,我需要過度理解我的概念。 – 2014-12-15 11:38:47