有没有办法可以从包含代码的字符串动态定义谓词主体?

2024-02-14

这可能是一个愚蠢的问题,但就这样吧。我希望能够从数据库 VARCHAR 列或任何字符串解析的字符串动态构造谓词 。例如,假设数据库中的列包含以下字符串:

return e.SomeStringProperty.Contains("foo");

这些代码/字符串值将存储在数据库中,知道通用“e”的可能属性是什么,并知道它们必须返回布尔值。然后,在一个神奇、奇妙、幻想的世界中,代码可以在不知道谓词是什么的情况下执行,例如:

string predicateCode = GetCodeFromDatabase();
var allItems = new List<SomeObject>{....};
var filteredItems = allItems.FindAll(delegate(SomeObject e) { predicateCode });

或 Lambda 化:

var filteredItems = allItems.FindAll(e => [predicateCode]);

我知道它可能永远不会这么简单,但是有没有一种方法,也许使用 Reflection.Emit,从文本动态创建委托代码并将其提供给 FindAll (或任何其他匿名/扩展)方法?


C# 和 VB 编译器可在 .NET Framework 中使用:

C# CodeDom 提供程序 http://msdn.microsoft.com/en-us/library/microsoft.csharp.csharpcodeprovider.aspx

但请注意,这样您最终会得到一个单独的程序集(只有在单独的 AppDomain 中才能卸载它)。仅当您可以立即编译所需的所有谓词时,此方法才可行。否则会涉及太多的开销。

System.Reflection.Emit 是一个很棒的 AP​​I,用于为 CLR 动态发出代码。不过使用起来有点麻烦,必须学习CIL。

LINQ 表达式树是一个易于使用的后端(编译为 CIL),但您必须编写自己的解析器。

我建议您看一下在 CLR(或 DLR)上运行的“动态语言”之一,例如铁蟒 http://www.codeplex.com/Wiki/View.aspx?ProjectName=IronPython。如果您问我的话,这是实现此功能的最有效方法。

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

有没有办法可以从包含代码的字符串动态定义谓词主体? 的相关文章

  • 使用具有现有访问令牌的 Google API .NET 客户端

    用例如下 移动应用程序正在通过 Google 对用户进行身份验证 并且在某些时候 我们需要将用户的视频发布到他的 YouTube 帐户 出于实际原因 实际发布应该由后端完成 已经存储在那里的大文件 由于用户已经通过应用程序的身份验证 因此应
  • C#动态支持吗?

    看完之后这个帖子 https stackoverflow com questions 2674906 when should one use dynamic keyword in c sharp 4 0k和链接 我还有 2 个问题 问题 1
  • 首先对列表中最长的项目进行排序

    我正在使用 lambda 来修改排序的行为 sorted list key lambda item item lower len item 对包含元素的列表进行排序A1 A2 A3 A B1 B2 B3 B 结果是A A1 A2 A3 B
  • 显示异常时的自定义错误消息:从客户端检测到潜在危险的 Request.Form 值

    我在我的 Web 应用程序中使用 ASP NET 的登录控件 当发生此异常时 我想在标签上显示一种有趣的错误类型System Web HttpRequestValidationException A potentially dangerou
  • C++ 异步线程同时运行

    我是 C 11 中线程的新手 我有两个线程 我想让它们同时启动 我可以想到两种方法 如下 然而 似乎它们都没有按照我的预期工作 他们在启动另一个线程之前启动一个线程 任何提示将不胜感激 另一个问题是我正在研究线程队列 所以我会有两个消费者和
  • 访问者和模板化虚拟方法

    在一个典型的实现中Visitor模式 该类必须考虑基类的所有变体 后代 在许多情况下 访问者中的相同方法内容应用于不同的方法 在这种情况下 模板化的虚拟方法是理想的选择 但目前这是不允许的 那么 模板化方法可以用来解析父类的虚方法吗 鉴于
  • ASP MVC:服务应该返回 IQueryable 的吗?

    你怎么认为 你的 DAO 应该返回一个 IQueryable 以便在你的控制器中使用它吗 不 您的控制器根本不应该处理任何复杂的逻辑 保持苗条身材 模型 而不是 DAO 应该将控制器返回给视图所需的所有内容 我认为在控制器类中看到查询 甚至
  • C 语言中 =+(等于加)是什么意思?

    我碰到 与标准相反 今天在一些 C 代码中 我不太确定这里发生了什么 我在文档中也找不到它 In ancientC 版本 相当于 它的残余物与最早的恐龙骨头一起被发现 例如 B 引入了广义赋值运算符 使用x y to add y to x
  • 在 2D 中将一个点旋转另一个点

    我想知道当一个点相对于另一个点旋转一定角度时如何计算出新的坐标 我有一个块箭头 想要将其相对于箭头底部中间的点旋转角度 theta 这是允许我在两个屏幕控件之间绘制多边形所必需的 我无法使用和旋转图像 从我到目前为止所考虑的情况来看 使问题
  • 基于xsd模式生成xml(使用.NET)

    我想根据我的 xsd 架构 cap xsd 生成 xml 文件 我找到了这篇文章并按照说明进行操作 使用 XSD 文件生成 XML 文件 https stackoverflow com questions 6530424 generatin
  • 如何重置捕获像素的值

    我正在尝试创建一个 C 函数 该函数返回屏幕截图位图中每四个像素的 R G 和 B 值 这是我的代码的一部分 for int ix 4 ix lt 1366 ix ix 4 x x 4 for int iy 3 iy lt 768 iy i
  • 生产代码中的 LRU 实现

    我有一些 C 代码 需要使用 LRU 技术实现缓存替换 目前我知道两种实现LRU缓存替换的方法 每次访问缓存数据时使用时间戳 最后比较替换时的时间戳 使用缓存项的堆栈 如果最近访问过它们 则将它们移动到顶部 因此最后底部将包含 LRU 候选
  • 当“int”处于最大值并使用 postfix ++ 进行测试时,代码定义良好吗?

    示例 未定义行为的一个示例是整数溢出的行为 C11dr 3 4 3 3 int溢出是未定义的行为 但这是否适用于存在循环的以下内容 并且不使用现在超出范围的副作用i 特别是 这是否后缀增量规格帮助 结果的值计算在副作用之前排序 更新操作数的
  • 在 C 中使用 GNU automake 中的解析器

    我是 GNU autotools 的新手 在我的项目中使用了 lex 和 yacc 解析器 将它们作为 makefile am 中的源代码会产生以下错误 配置 in AC CHECK PROGS YACC bison yacc none i
  • 当模板类不包含可用的成员函数时,如何在编译时验证模板参数?

    我有以下模板struct template
  • 获取 2 个数据集 c# 中的差异

    我正在编写一个简短的算法 它必须比较两个数据集 以便可以进一步处理两者之间的差异 我尝试通过合并这两个数据集并将结果更改放入新的数据集来实现此目标 我的方法如下所示 private DataSet ComputateDiff DataSet
  • 双精度类型二维多维数组的 pinvoke 编组作为 c# 和 c++ 之间的输入和输出

    我有以下我正在尝试解决的双物质类型的 2d 多维数组的 c 和 c pinvoke 编组 我已经查看了以下热门内容以获得我目前拥有的内容使用双精度数组进行 P Invoke 在 C 和 C 之间编组数据 https stackoverflo
  • 用于 C# XNA 的 Javascript(或类似)游戏脚本

    最近我准备用 XNA C 开发另一个游戏 上次我在 XNA C 中开发游戏时 遇到了必须向游戏中添加地图和可自定义数据的问题 每次我想添加新内容或更改游戏角色的某些值或其他内容时 我都必须重建整个游戏或其他内容 这可能需要相当长的时间 有没
  • 使用 Crypto++ 获取 ECDSA 签名

    我必须使用 Crypto 在变量中获取 ECDSA 签名 我在启动 SignMessage 后尝试获取它 但签名为空 我怎样才能得到它 你看过 Crypto wiki 吗 上面有很多东西椭圆曲线数字签名算法 http www cryptop
  • 匿名结构体作为返回类型

    下面的代码编译得很好VC 19 00 23506 http rextester com GMUP11493 标志 Wall WX Za 与VC 19 10 25109 0 标志 Wall WX Za permissive 这可以在以下位置检

随机推荐

  • 文本转换:大写;也影响占位符

    我有以下简单的输入
  • TypeScript 接口,其中对象键是另一个对象的值

    这是我的界面 interface MyInterface a string b string I have objectA从这个界面 const objectA MyInterface a val1 b val2 然后 我有一个函数可以读取
  • Python Tkinter 如何使用网格为窗口着色

    我正在尝试 Tkinter 并使用网格编写一个小窗口 代码如下 from Tkinter import from modules logic import game import options class StartWindow def
  • 删除温莎城堡 3 中的组件

    我正在温莎城堡中使用 TypedFactoryFacility 来允许我使用接口工厂依赖项注入 当不需要这些组件时 应该为 Null 我在自动委托工厂将 Func 注入自动解析的组件时遇到问题 我想保留 TypedFactoryFacili
  • 如何返回 mongodb 中更新的对象数量?

    我正在更新 mongodb 中的多个元素 是否可以返回受影响对象的数量 使用 getLastError 这nkey 将包含更新文档的数量 gt db count update x 1 inc x 1 false true gt db run
  • 如何为班级中的所有测试设置测试类别

    我在用MSTest https en wikipedia org wiki MSTest 并且我想一次为测试类中的所有方法设置相同的测试类别 而不需要单独为每个方法设置 TestCategory 属性 如何才能做到这一点 最方便 最明显的方
  • 如何将 UIColor 转换为十六进制字符串?

    我有一个项目 需要将 UIColor 的 RGBA 值作为 8 个字符的十六进制字符串存储在数据库中 例如 UIColor blueColor 将为 0000FFFF 我知道我可以像这样获取组件值 CGFloat r g b a color
  • Facebook 广告 API - 批量请求定位搜索

    问题 我在提交 Facebook Ads API 的批量请求时遇到问题 我想知道是否有人可以提供有关以下错误的见解 我尝试获取艺术家列表 在这个简化示例中仅列出 50 名 然后针对这些艺术家提交 TargetingSearch 请求 但是
  • Hadoop put 性能 - 大文件(20GB)

    我正在使用 hdfs put 将一个 20GB 的大文件加载到 hdfs 中 目前该过程运行 4 分钟 我正在尝试缩短将数据加载到 hdfs 的写入时间 我尝试利用不同的块大小来提高写入速度 但得到以下结果 512M blocksize 4
  • Chrome 加载第一个 AJAX 响应速度很慢

    我正在使用 React 和 Flux 构建一个应用程序 单击项目列表会启动一个操作 然后使用以下命令启动 通过效果 AJAX 请求axios 虽然我已经尝试过superagent bluebird promise具有相同的结果 问题是 使用
  • 如何杀死 iPhone 中后台运行的应用程序?

    我只是想知道如何杀死 iPhone 中的后台进程 应用程序 就像在 Auto Lock SBSettings 中一样 进程 切换能够列出所有后台进程并允许用户杀死其中的任何进程 提前致谢 感谢 refulgentis Chuck 的快速回复
  • 设置 BOOL 属性的正确方法

    我想在类初始值设定项中设置一个 BOOL 属性 property assign nonatomic BOOL isEditMode id init self setValue NO forKey isEditMode return self
  • 如何隐藏 Chrome“在调试器中暂停”覆盖层?

    Chrome 的一些半新更新现在在断点处暂停时在我的网页上放置了一个叠加层 此时 我特别尝试查看页面标记的状态 而叠加层正好隐藏了我想要看到的内容 有没有办法关闭这个标记 或者有没有办法将 Chrome 恢复到没有此错误功能的版本 现在 I
  • 放置Database.SetInitializer的地方

    我正在开发一个项目 该项目最终可能会出现多个 UI 版本 变体 但到目前为止 我的解决方案 Web 中有两个子项目 包含带有 ASP NET MVC 的 Web 界面 服务项目是我定义数据库上下文和模型的地方 我的目标是在我的 Web 项目
  • iPhone:键盘挡住屏幕[重复]

    这个问题在这里已经有答案了 可能的重复 UITableView和键盘滚动问题 https stackoverflow com questions 594181 uitableview and keyboard scrolling issue
  • 相当于 Matlab 的“randsample”随机样本

    Java中有没有类似的函数randsample在Matlab中 它可以返回加权样本 随机均匀采样并放回 并且具有权重 w i 对于每个数字 选择数字 i 的概率是 w i sum w 我想用这样的东西 randsample 0 1 1 tr
  • 如何将 Vuetify 选项卡与 vue-router 一起使用

    我有以下内容jsfiddle https jsfiddle net jjloneman e5a6L27u 12 有两个 Vuetify 选项卡 该文档没有显示使用示例vue router跟他们 我找到了这个Medium com 帖子 htt
  • Docker Rails mysql 未连接

    我正在尝试将主机上的 Rails 应用程序连接到 docker mysql 映像 但我收到此错误 Authentication plugin caching sha2 password cannot be loaded dlopen usr
  • 如何使用 Python 将新列附加到 CSV 文件? [复制]

    这个问题在这里已经有答案了 我在一个数组中存储了一组四个数字 我想将其添加到 分数 列下的 CSV 文件中 with open Player csv ab as csvfile fieldnames Score writer csv Dic
  • 有没有办法可以从包含代码的字符串动态定义谓词主体?

    这可能是一个愚蠢的问题 但就这样吧 我希望能够从数据库 VARCHAR 列或任何字符串解析的字符串动态构造谓词 例如 假设数据库中的列包含以下字符串 return e SomeStringProperty Contains foo 这些代码