linqkit - 如何使用 PredicateBuilder 在内部导航上应用可重用表达式?
问题描述
例如以下模型,用户和公司都有一个电子邮件导航:
User -> Intermediary -> Email
Company -> Intermediary -> Email
电子邮件有一些您想要重用的复杂规则。当你在 上写表达式时这很容易 User
,但我需要在 上使用相同的表达式Company
。所以他们需要接受电子邮件而不是公司或用户。
我不想要什么:
Expression<Func<User, bool>> emailExpr = x => x.Intermediary.Any(x => x.Email.SomeRule == true);
示例表达式
Expression<Func<Email, bool>> emailExpr = x => x.SomeRule == true;
这有效
User.AsExpandable().Where(x => x.Intermediary.Any(x => emailExpr.Invoke(x.Email)))
现在为建设者
我可以使用 PredicateBuilder 重用表达式,并以各种方式(嵌套)分离表达式,也可以在集合中。我只是无法让它在某个级别上进行直接导航。我想应用多个没有用户根的电子邮件规则..
var collectionOfEmailRules = PredicateBuilder.New<Email>(x.SomeRule == true);
collectionOfEmailRules.And(x => x.EmailShouldAlso == ....);
如何在电子邮件集合上调用电子邮件规则?
这不起作用fe,只是查询无法翻译的无效操作异常。
User.AsExpandable().Where(x => x.Intermediary.Any(x => collectionOfEmailRules.Compile().Invoke(x.Email)))
解决方案
推荐阅读
- ethereum - 以太坊安全帽 - NomicLabsHardhatPluginError:无法部署合约 ERC1155Facet 的抽象合约工厂
- python - 内核无法在 Jupyter Notebook 上启动
- laravel - Docker Laravel Redis - 队列初始化问题
- c - 为什么下一个字段显式设置为空?
- javascript - 为审阅者生成人类可读的捆绑 css 和 js 文件
- netsuite - NetSuite 已保存搜索 - 使用 MAXIMUM 和使用 SUM 时比较字段?
- database - 无法连接 MongoDb 数据库
- if-statement - 为什么我的程序最后没有单独读取我的 while 循环中的 else 语句。无论我做什么它总是包括其他
- discord - Discord 文本频道创建
- java - Spring boot Api 在邮递员中为印地文文本工作正常,但在从移动应用程序发送请求时印地文数据未正确接收