首页 > 解决方案 > 具有两个通用方法输入参数的表达式函数

问题描述

我想整合这个表达

Expression<Func<Customer, string, bool>> paramCompareFunc = (cust, name) => cust.Company == name;

为了这

private bool IsUnique<Entity>(DbSet<Entity> set, 
   string param, 
   Expression<Func<Entity, string, bool>> paramCompareFunc) 
where Entity : class
{
  var query = set.Where(paramCompareFunc); // how I can pass param to expression?
  // var query = set.Where(paramCompareFunc(param)); // error here
...

如何将第二个参数传递给表达式?
我想为不同的实体定义不同的比较表达式(它们没有任何相同的名称字段),并有可能将此表达式传递给我的通用函数。

标签: c#.netentity-frameworklinqgenerics

解决方案


“简单”的方法是通过更改您的 api 以使用工厂方法来构建Expression您实际需要的;

Expression<Func<Customer, bool>> GetCompareFunc(string name) => (cust) => cust.Company == name;

虽然您可以使用ReplacingExpressionVisitor常量交换 name 参数,但这会对性能产生负面影响。


推荐阅读