表达式等于

2024-01-10

所以,我正在尝试找出表达式树。我试图添加动态等于可查询,其中 T 是几个不同的表之一。我首先检查表中是否包含我想要过滤的字段。

ParameterExpression param = Expression.Parameter(typeof(TSource), "x");

Expression conversionExpression = Expression.Convert(Expression.Property(param, _sourceProperty), typeof(TList));

Expression<Func<TSource, TList>> propertyExpression = Expression.Lambda<Func<TSource, TList>>(conversionExpression, param);

Expression<Func<TList, TList, bool>> methodExpression = (x, y) => x.Equals(y);

ReadOnlyCollection<ParameterExpression> parameters = propertyExpression.Parameters;

InvocationExpression getFieldPropertyExpression = Expression.Invoke(
                                                propertyExpression,
                                                parameters.Cast<Expression>());

MethodCallExpression methodBody = methodExpression.Body as MethodCallExpression;
MethodCallExpression methodCall = Expression.Call(methodBody.Method, Expression.Constant(equalTo), getFieldPropertyExpression);

Expression<Func<TSource, bool>> equalsStatement = Expression.Lambda<Func<TSource, bool>>(methodCall, parameters);

return source.Where(equalsStatement);

当我执行此操作时,我在 Call 语句中遇到 MethodInfo 问题。它告诉我;

静态方法需要空实例,非静态方法需要非空实例。

我不是表达式树的大师,但我想我了解我在这里所做的大约 75%,并且知道我想要实现的目标。 TList 现在是一个不好的名字,但我从一个可以很好地生成 In 语句的示例中得到了这个名字。

我真的在这里寻找一个解释,以便我可以自己完成代码,或者一个解释我所缺少的内容的解决方案。

Edit:

好吧,在经历了一个非常令人沮丧的下午之后,我仍然感觉自己不太明白自己在看什么,我想我已经有了答案。

ParameterExpression sourceObject = Expression.Parameter(typeof(TSource), "x");

Expression<Func<TSource, bool>> check = Expression.Lambda<Func<TSource, bool>>
        (
            Expression.Equal(
            Expression.MakeMemberAccess(sourceObject, typeof(TSource).GetProperty(_sourceProperty)),
            Expression.Constant(equalTo)
        ),
        sourceObject
);

return source.Where(check);

有人能向我解释为什么原版不适合我想做的事情吗?我想更多地了解实际过程,但我觉得我没有像我希望的那样快地掌握它。


Expression.Call 有两组重载(每组都有很多重载)。一组用于实例方法,另一组用于静态方法。在静态方法中,第一个参数是 MethodInfo 对象 - 就像您所拥有的一样。为了instance方法,第一个参数应该是表示目标的表达式(即方法调用中“.”的左侧。)鉴于您收到的错误,听起来 MethodInfo 表示非静态方法,因此您必须提供一个表示实例的表达式作为第一个参数。

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

表达式等于 的相关文章

随机推荐

  • AngularJS 1.3 - 日期选择器初始格式不正确

    我昨天开始使用 AngularJS 1 3 发现一个问题是 Datepicker 中的初始日期不是定义的格式 日期格式正确after选择一个日期 AngularJS 1 2 10 的初始格式是正确的 如示例中注释掉 script 标签所示
  • 获取 Entity Framework 7 中修改对象的列表

    我很困惑 升级到 Entity Framework 7 并且我通常会覆盖里面的 SaveChangesDbContext能够在更改之前获取所有已修改对象的列表 最终 我有一个脚本可以跟踪数据库中的先前版本 在 Entity Framewor
  • 在 MapView 中的地图标记上方显示弹出窗口

    我不敢相信没有简单的方法可以做这样的基本事情 我想在用户单击地图标记后显示一个弹出窗口 气球 LinearLayout 类似于 Google 地图应用程序中的内容 当用户滚动地图时 它应该随地图移动 做这个的最好方式是什么 一种想法是在我的
  • Google Chrome 应用程序:Web 视图行为

    在研究一个问题时在 Chrome 扩展中
  • 在react-router中配置应用程序的基本名称

    我在反应路由器 2 x 配置方面遇到了一些困难 特别是应用程序基本名称 我有一个应用程序 在其整个生命周期中可能有不同的基本根 例如 开发中 users生产中 account迁移后投入生产 基本名称在几个地方发挥作用 Webpack 中的静
  • 如何在 Objective-C 中以编程方式发送带有某些正文文本的短信 [重复]

    这个问题在这里已经有答案了 可能的重复 如何在 iPhone 上以编程方式发送短信 https stackoverflow com questions 10848 how to programmatically send sms on th
  • Java 8 中致命的死亡钻石

    我是一名 Java 开发人员 同时也在学习 C 我最近进入了 C 中的 死亡钻石 并研究了这个问题在 Java 中是否可能出现 在接口是否解决了 致命的死亡钻石 问题 https stackoverflow com questions 98
  • 使用 ProGuard 和 Android 应用程序时出现重复资源

    我正在尝试将 ProGuard 与我的一个应用程序 假设为 A 一起使用 该应用程序包含另一个应用程序作为库 假设为 B 这是我的 proguard 文件 optimizationpasses 5 dontusemixedcaseclass
  • Hibernate ManyToMany 自连接是否可以用于非键列?获取映射异常

    我遇到以下问题 我有一个与其他用户实体具有多对多关系的用户实体 因此 我想使用多位注释进行自连接 这种关系基于整个系统使用的现有表 因此我根本无法对数据库进行更改 所以我们有 2 个表 User Id ShortName 和 UserLin
  • Linux 磁盘缓存和 kmalloc 与 GFP_ATOMIC

    在一些知名的article https www linuxatemyram com 关于Linux磁盘缓存有这样的说法 绝对没有理由禁用它 Also 一个拥有足够内存的健康 Linux 系统 在运行一段时间后 会显示以下预期且无害的行为 可
  • 我应该如何处理 API 中的错误?

    我正在编写一个 API 它封装了一些核心基础 Web 功能 可以返回许多可能的错误条件 我正在努力决定处理 API 使用者应该处理的错误情况的最佳方法 例如网络超时 接收意外结果 格式错误的 XML 等 我提出了 3 个不同的模型 但不确定
  • 新的 Facebook SDK 应用程序不可用:您尝试使用的应用程序不再可用或访问受到限制

    新用户无法通过 Facebook 登录 并收到一条错误消息 应用程序不可用 您尝试使用的应用程序不再可用或访问受到限制 用户使用现有的 Facebook 帐户进行访问没有任何问题 当我在 Facebook 上创建虚假 测试帐户时 我遇到了这
  • 如何从文件名获取完整文件路径?

    如何获取给定文件的完整路径 例如我提供 string filename test txt 结果应该是 Full File Path C Windows ABC Test test txt Try string fileName test t
  • 应用程序范围的全局变量

    In Rails 我应该在哪里定义Rails堆栈的每一层都可以识别的变量 例如 我想要一个CUSTOMER NAME John 可以访问的变量helper rake task 控制器 and model 我应该在哪里定义这个变量Rails
  • jQuery 当前位置和滚动位置之间的差异

    我试图获取元素距顶部的当前距离与其滚动后的下一个位置之间的差异 事实上 我试图根据其距离来选择动画持续时间 我写了下面的代码 但它不能正常工作 I have 6菜单项 当我单击每个菜单项时 窗口滚动到其位置 但问题是 当我单击最后一项时 它
  • 从控制台运行 Zend Framework 2 操作不起作用

    我有一个 ZF2 应用程序从 Web 服务器正常运行 我需要从命令行运行一些操作 因为我想要执行一些计划任务 cron 作业 所以我找到了这些有用的链接 Zend框架的官方文档 http framework zend com manual
  • 将 vuex 状态与服务器同步的推荐策略

    想象一下这个简单的例子 您有一个 Vue JS 应用程序 用户可以在其中创建任务列表并对它们进行排序 这些列表应由服务器存储在数据库中 假设我们有一个ListComponent它完成了大部分用户体验 我的问题是 我应该使用哪种模式来处理前后
  • 最佳开源 LINQ 提供商 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何更改 C++ STL 向量的特定元素

    vector
  • 表达式等于

    所以 我正在尝试找出表达式树 我试图添加动态等于可查询 其中 T 是几个不同的表之一 我首先检查表中是否包含我想要过滤的字段 ParameterExpression param Expression Parameter typeof TSo