C# 泛型方法的带两个输入参数的表达式Func

C# 泛型方法的带两个输入参数的表达式Func,c#,.net,entity-framework,linq,generics,C#,.net,Entity Framework,Linq,Generics,我想整合这个表达式 Expression<Func<Customer, string, bool>> paramCompareFunc = (cust, name) => cust.Company == name; 表达式paramCompareFunc=(cust,name)=>cust.Company==name; 为此 private bool IsUnique<Entity>(DbSet<Entity> set, stri

我想整合这个表达式

Expression<Func<Customer, string, bool>> paramCompareFunc = (cust, name) => cust.Company == name;
表达式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
...
private bool是唯一的(DbSet set,
字符串参数,
表达式参数(比较函数)
其中实体:类
{
var query=set.Where(paramCompareFunc);//如何将param传递给表达式?
//var query=set.Where(paramCompareFunc(param));//此处出错
...
如何将第二个参数传递给表达式?
我想为不同的实体定义不同的比较表达式(它们没有任何相同的名称字段),并有可能将此表达式传递到我的通用函数中。

简单的方法是更改api以使用工厂方法来构建实际需要的
表达式

表达式GetCompareFunc(字符串名称)=>(客户)=>cust.Company==name;

虽然可以使用
ReplacingExpressionVisitor
将name参数与常量交换,但这会对。

set.Where(e=>paramCompareFunc(e,param))产生负面影响
?虽然不是每个
实体都是
客户
,但您是否也会将函数设置为通用函数?@Charlieface
paramCompareFunc
是一个
表达式
,因此不是invocable@pinkfloydx33并采用一个
表达式
@Charlieface我知道。但是…
paramCompareFunc(e,param)无效,不会编译,因为您不能调用<代码>表达式<代码>,好像它是一个方法/委托,即使在一个表达式的上下文中,如果您有一个类型,每个类型都有一个名称字段,那么您应该考虑定义一个接口。这样,您就不必编写一组几乎相同的表达式。