相关疑难解决方法(0)

将谓词的表达式树变换为目标另一种类型

介绍

在我目前正在处理的应用程序中,每个业务对象有两种:"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)

c# linq lambda expression-trees

50
推荐指数
4
解决办法
8540
查看次数

标签 统计

c# ×1

expression-trees ×1

lambda ×1

linq ×1