首页 > 解决方案 > 如何使用 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)))

标签: linqkit

解决方案


推荐阅读