在我目前正在处理的应用程序中,每个业务对象有两种:"ActiveRecord"类和"DataContract"类.例如,会有:
namespace ActiveRecord {
class Widget {
public int Id { get; set; }
}
}
namespace DataContract {
class Widget {
public int Id { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
数据库访问层负责在系列之间进行转换:您可以告诉它更新a DataContract.Widget,它将神奇地创建ActiveRecord.Widget具有相同属性值的数据并保存它.
尝试重构此数据库访问层时,问题浮出水面.
我想在数据库访问层中添加如下方法:
// Widget is DataContract.Widget
interface IDbAccessLayer {
IEnumerable<Widget> GetMany(Expression<Func<Widget, bool>> predicate);
}
Run Code Online (Sandbox Code Playgroud)
以上是一个简单的通用"get"方法,带有自定义谓词.唯一感兴趣的是我传递的是表达式树而不是lambda,因为IDbAccessLayer我在里面查询一个IQueryable<ActiveRecord.Widget>; 为了有效地做到这一点(想想LINQ to SQL)我需要传入一个表达式树,所以这个方法只是要求.
障碍:参数需要从一个神奇地转换Expression<Func<DataContract.Widget, bool>>为一个Expression<Func<ActiveRecord.Widget, bool>>.
我想在里面做的GetMany是:
IEnumerable<DataContract.Widget> GetMany(
Expression<Func<DataContract.Widget, bool>> predicate)
{
var lambda = …Run Code Online (Sandbox Code Playgroud)