将 2 个参数 Lambda 表达式转换为 1 个参数 Lambda 表达式(指定一个参数)

2024-03-22

我有表情

Expression<Func<Car, Driver, bool>> CanBeDrivenBy = 
    (car, driver) => car.Category == 'B' && driver.Age > 18;

我想要一些可以由司机驾驶的汽车

IQueryable<Cars> cars = ...;
Driver driver = ...;
cars.Where(CanBeDrivenBy);   // Fail, expecting Expression<Func<Car, bool>>

所以我需要转换Expression<Func<Car, Driver, bool>> to Expression<Func<Car, bool>>(指定驱动程序)

是的,我可以使用

cars.Where(c => c.Category == 'B' && driver.Age > 18);

但我需要具有可以动态更改的表达式的解决方案。我需要传递表达式(使用实体框架)


您可以重用源表达式主体的修改版本

using System;
using System.Linq.Expressions;

public class Program
{
    public static Expression<Func<T1, TResult>> Bind2nd<T1, T2, TResult>(Expression<Func<T1, T2, TResult>> source, T2 argument)
    {
        Expression arg2 = Expression.Constant(argument, typeof (T2));
        Expression newBody = new Rewriter(source.Parameters[1], arg2).Visit(source.Body);
        return Expression.Lambda<Func<T1, TResult>>(newBody, source.Parameters[0]);
    }

    public static void Main(string[] args)
    {
        Expression<Func<string, string, int>> f = (a, b) => a.Length + b.Length;
        Console.WriteLine(f); // (a, b) => (a.Length + b.Length)

        Console.WriteLine(Bind2nd(f, "1")); // a => (a.Length + "1".Length)
    }

    #region Nested type: Rewriter

    private class Rewriter : ExpressionVisitor
    {
        private readonly Expression candidate_;
        private readonly Expression replacement_;

        public Rewriter(Expression candidate, Expression replacement)
        {
            candidate_ = candidate;
            replacement_ = replacement;
        }

        public override Expression Visit(Expression node)
        {
            return node == candidate_ ? replacement_ : base.Visit(node);
        }
    }

    #endregion
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 2 个参数 Lambda 表达式转换为 1 个参数 Lambda 表达式(指定一个参数) 的相关文章

随机推荐

  • Jquery next() 问题

    我有这个 div class selection a class current href 1 a div class class text div a href 2 a div class class text div a href 4
  • sudo 使用什么 shell

    我很抱歉 因为这一定是其他人问过的问题 但这似乎是谷歌证明 我试图弄清楚正在调用什么 shell 因为我遇到了不一致的情况 如果我这样做 我的脚本将无法工作sudo 但是如果我的话确实有效sudo bash 然而当我sudo echo 0
  • 使用各种方法无法使系统蜂鸣声在 C 中工作

    我已经尝试过 a 7 windows h 蜂鸣功能等 但没有任何效果 较新的硬件没有内置此功能吗 控制台程序 较新的硬件需要为残障人士提供蜂鸣声 但 Windows 7 移动了Beep 进入实际的 Windows 音频子系统 因此请确保您的
  • 测试两个列表列表是否相等

    假设我在 Python 中有两个列表 l1 a 1 b 2 c 3 l2 b 2 c 3 a 1 测试它们是否相等的最优雅的方法是什么 l1只是元素的一些排列l2 注意对普通列表执行此操作see here https stackoverfl
  • 在采用多个可选参数的方法中,如何指定除第一个参数之外的任何参数?

    我有一个这样的方法 def foo fruit apple cut sliced topping ice cream some logic here end 我怎样才能调用它 我只覆盖顶部参数 但使用其他参数的默认值 像这样 foo hot
  • 导入使用 MultiProcessing Python 的模块

    我希望使用多处理模块来加快某些运输规划模型的运行时间 我已经通过 正常 方法尽可能多地进行了优化 但其核心是一个荒谬的并行问题 例如 对 4 组不同的输入执行同一组矩阵运算 所有信息都是独立的 伪代码 for mat1 mat2 mat3
  • 在 Java Servlet 中生成 HTML 响应

    如何在 Java servlet 中生成 HTML 响应 通常 您会将请求转发到 JSP 进行显示 JSP 是一种视图技术 它提供了一个用于编写普通 HTML CSS JS 的模板 并提供了借助标签库和 EL 与后端 Java 代码 变量进
  • 折线百分比的纬度

    如何沿折线返回给定百分比的 latLng 值 我花了一天时间使用插值和单个节点来完成此任务 他们是不是有一个更简单的函数可以让 grunt 工作 谷歌地图 API v3 谢谢 http www geocodezip com scripts
  • 是否可以在 java jit 上使用 Final boolean 删除跳转?

    正如我们所知 有些人说 java JIT 比 C 更快 我有一些想法 可以利用 JIT 并在运行时代码中删除一些指令 这是我尝试过的示例代码 Created by kadirbasol on 4 6 14 public class Remo
  • jqplot 不同折线图的荧光笔

    我有一系列折线图jqPlot图表 我想要做的是关闭所有图表的突出显示 除了我想要突出显示的一张图表 我怎样才能做到这一点 我还没有一个很好的例子来说明如何做到这一点 也没有时间做一个 但我会在完成时更新 在所有事件中 荧光笔插件都会为每个系
  • PrestaShop:生产前删除所有测试数据

    我正在搜索一个在 MySql 上运行的脚本 以删除 截断表 PrestaShop 数据库版本 1 4 9 上的所有测试数据 客户 订单 购物车等 感谢 帕斯卡 安装 Prestashop Cleaner 并在配置中您可以选择删除目录 订单和
  • RestAssured:如何禁用 PreAuthorize

    我正在使用 RestAssured 测试 API 我调用的方法使用下一个注释 PreAuthorize hasAnyRole ROLE1 ROLE2 ROLE3 我的测试类包含用于测试的活动配置文件 对于测试配置 我们使用 yaml 文件
  • 在 AngularJS 中使用“scope”从另一个控制器调用一个控制器的方法

    我试图通过使用在第一个控制器中调用第二个控制器的方法scope多变的 这是我的第一个控制器中的方法 scope initRestId function var catapp document getElementById SecondApp
  • Haskell 中的字符串格式化

    Haskell 相当于什么 string str string Format 0 1 10 20 C 有一个Printf https hackage haskell org package base docs Text Printf htm
  • 如何制作多列无序列表?

    我正在尝试创建一个如下所示的项目列表 主要要求是列表应该灵活 可以在不接触代码的情况下添加或删除列表项 到目前为止我发现的最好的解决方案是将所有列表项 包括标题 放入 li 标记并使用本文中介绍的技术之一对其进行样式设置分开列出文章 htt
  • 重写 URL 并使新 URL 显示在地址栏中

    我使用下面的代码来重写一些 URL RewriteEngine On Options FollowSymlinks RewriteBase RewriteRule New Hampshire a zA Z0 9 s html NH 请记住
  • 如何在 DLL 边界上公开 STL 列表?

    我有一个 DLL 需要访问主机应用程序中 STL 容器中存储的数据 因为 C 没有标准的 ABI 而且我想支持不同的编译器 所以应用程序和 DLL 之间的接口基本上必须保持普通旧数据 对于向量来说 这相对简单 您可以简单地返回向量的内存块
  • 如何在Python中的setup.py中包含并安装本地依赖项?

    我正在创建一个setup py分发我的应用程序 该应用程序有许多可以通过 pip 安装的依赖项 它还有一些无法从 PyPI 安装的自定义依赖项 所以 我创建了一个custom package 0 1 whl它将包含在发行版中 并且必须在之后
  • XMPP - 名册订阅说明

    假设我的 Jabber 服务器上有 2 个用户 Alice 和 Bob 添加到名册中并订阅为both 我需要执行以下步骤 Alice 向 Bob 发送订阅请求 当 Bob 收到请求时 他会批准该请求 Bob 可能也对 Alice 的存在感兴
  • 将 2 个参数 Lambda 表达式转换为 1 个参数 Lambda 表达式(指定一个参数)

    我有表情 Expression