如何使用反射调用 IDBSet.FirstOrDefault(predicate)?

2023-12-04

给定一个 IDbSet,其中 Person 包含“Id”属性,我通常如何执行以下命令:

var p = PersonDbSet.FirstOrDefault(i=>i.Id = 3);

我可以构建谓词,并获取对 FirstOrDefault 扩展方法的引用,但我似乎无法将它们放在一起:

首先是谓词

ParameterExpression parameter = Expression.Parameter(entityType, "Id");
MemberExpression property = Expression.Property(parameter, 3);
ConstantExpression rightSide = Expression.Constant(refId);
BinaryExpression operation = Expression.Equal(property, rightSide);
Type delegateType = typeof (Func<,>).MakeGenericType(entityType, typeof (bool));
LambdaExpression predicate  = Expression.Lambda(delegateType, operation, parameter);

现在引用扩展方法:

    var method = typeof (System.Linq.Queryable).GetMethods(BindingFlags.Static | BindingFlags.Public)
                .FirstOrDefault(m => m.Name == "FirstOrDefault" && m.GetParameters().Count() == 2);

   MethodInfo genericMethod = method.MakeGenericMethod(new[] { entityType });            

最后尝试执行该方法:

object retVal = genericMethod.Invoke(null, new object[] {dbSet, predicate});

抛出 ArgumentException 并显示以下消息:

“‘System.Reflection.RuntimePropertyInfo’类型的对象无法转换为‘System.Linq.IQueryable`1[Person]’类型。”

有什么想法吗?


您必须制作该方法的通用版本:

MethodInfo genericMethod = method.MakeGenericMethod(entityType);

object retVal = genericMethod.Invoke(dbSet, new object[] {expr});

顺便提一句。你不应该尝试从中获取方法吗System.Linq.Queryable? System.Linq.Enumerable都是关于对象的 linq,看起来你正在尝试调用你的数据库。

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

如何使用反射调用 IDBSet.FirstOrDefault(predicate)? 的相关文章

随机推荐

  • SQLAlchemy 返回奇怪的数据

    我正在尝试从表中导出日期 我只想将原始创建的对象拉出来 我正在运行以下查询 return model Session query cls filter cls issue id issue id order by desc created
  • SQL:更新表,其中列=多个值

    我创建了一个 SQL 查询 它更新表列 其中另一列 值 CODE Update Products Set ProductName Shoes WHERE ProductID 1 2 3 4 5 6 7 8 问题在于ProductID 我怎样
  • java应用程序可以分配比jvm启动参数指定的更多的内存吗?

    假设 java 应用程序不使用任何本机库 有没有办法让它分配比 jvm 启动参数指定的内存更多的内存 反过来问 我可以相信 Java 应用程序永远不会分配比 JVM 启动参数限制更多的内存吗 是的 它可以 它不能在 JVM 堆上分配更多内存
  • 如何获取本地时间并将其放入字符串中

    我有一个方法s它有一个日期时间作为参数 怎么用c 写呢 In c it is string s System DateTime sd 编辑 如何调用S方法 我也想在一个字符串中显示小时 在另一个字符串中显示第二个 等等 另一个问题是 如何转
  • 如何以编程方式配对 Android 蓝牙设备

    我正在开发一个应用程序 我想连接蓝牙设备 主要问题是我不希望用户输入所需的密码 而是应用程序应该自己执行此操作 我没有任何与连接相关的问题 只想要由应用程序本身插入并完成 pin 身份验证过程 我发现以下代码我确信它可以工作 但不确定如何在
  • Gatsby Develop:安装“sharp”模块时出错

    我刚刚在 Gatsby 上从入门模板上进行了 git 克隆 当我运行 gatsbydevelopment 时遇到了这个错误 我已经删除了节点模块 以及节点模块中的锐模块 无济于事 请让我知道此时发生了什么 PS C Users ipche
  • Keras:使用模型的一阶导数和二阶导数之和作为最终输出

    假设我使用 Keras 创建了这个模型 model Sequential model add Dense 32 activation tanh input dim 1 model add Dense 10 activation tanh m
  • 子类上的急切加载关联

    我有以下 简化的 类层次结构 def Parent lt ActiveRecord Base end def Child lt Parent belongs to other end def Other lt ActiveRecord Ba
  • jiffies 在无滴答内核中如何递增?

    内核维护一个全局变量 名为jiffies它保存系统启动时的滴答数 定时器中断数 每次发生定时器中断时 内部内核计数器的值都会递增 在无滴答内核 动态滴答中 中断不会定期发生 那么jiffies增加 的价值jiffies总是更新调用do ti
  • Jackson/Hibernate、元获取方法和序列化

    我们有很多具有嵌套关系的休眠实体类 我正在尝试找到将给定实体转换为等效 json 格式的最佳方法 我了解 JsonIgnore Jackson mixins 和 JsonFilters 并且一直在尝试这些 我们面临的挑战如下 使用 OneT
  • 如何通过单击按钮打印 HTML 内容而不是页面? [复制]

    这个问题在这里已经有答案了 我想在用户单击按钮时打印一些 HTML 内容 一旦用户单击该按钮 浏览器的打印对话框将打开 但不会打印网页 相反 它会打印页面上未显示的其他一些 HTML 内容 在问这个问题时 我脑子里几乎没有解决方案 但我不确
  • 如何防止文本元素中出现字母?

    我喜欢最大长度为 3 的输入 这些输入值只能是数字 不能是字母 参考这篇文章 为什么 在 Safari 中不起作用 你可以看到我不能使用
  • Vue DOM 图像无法正确显示

    我正在使用 Vue 框架并使用以下命令创建图像DomUtil Create功能 在此图像中 我想动态地将源写入该图像 但该图像不会向用户显示 我使用以下命令在页面上放置了一个普通图像 img 标签 它在这里工作 仅当创建 DOM 元素时它才
  • 如何使用 urllib 跟踪重定向?

    我正在 Python 3 中创建一个脚本 该脚本访问如下页面 example com daora zz asp x qqrzzt 使用 urllib request urlopen example com daora zz asp x qq
  • 如何在 Google Apps 脚本中使用 AngularJS

    是否可以使用 Angular js 作为使用 Google Apps 脚本中的 HtmlService 提供服务的 Web 应用程序的一部分 我也改变了Code gs文件如下链接所述 如何在 Google Apps 脚本提供的 HTML 网
  • .NET 框架中最安全的哈希算法是什么?

    生成的哈希值的大小和算法的速度并不重要 我真的只对它是最安全的选择感兴趣 我也不想使用任何第三方库 我使用的 NET 框架版本是 3 5 如果这有什么区别的话 我会想SHA512将是内置哈希算法的最佳选择 它是非常安全的算法的最大哈希形式
  • Python 彗星服务器

    我正在构建一个具有实时提要 类似于 Facebook 的新闻提要 的 Web 应用程序 我想通过长轮询机制对其进行更新 据我所知 对于 Python 我的选择几乎是使用 Stackless 从他们的 Comet wsgi 示例构建 或 Co
  • Openpyxl:将背景颜色设置为行和列属性错误

    看了这里的几个例子后 我尝试将背景颜色设置为整行和整列 我已经做好了 import openpyxl from openpyxl styles import PatternFill wb openpyxl load workbook sel
  • 如何在 Go Web-Server 和 Vue.js 前端之间交换数据? http 帖子:404

    我试图了解如何在非常精简的 golang Web 服务器和 vue js 前端之间交换数据 这是 server gorillamux go 文件 package main import encoding json github com go
  • 如何使用反射调用 IDBSet.FirstOrDefault(predicate)?

    给定一个 IDbSet 其中 Person 包含 Id 属性 我通常如何执行以下命令 var p PersonDbSet FirstOrDefault i gt i Id 3 我可以构建谓词 并获取对 FirstOrDefault 扩展方法