包含的LINQ表达式

我想在linq中添加动态表达式,但面对包含方法的问题,它对Equal方法非常有效

问题是我正在动态地获取FilterField如何在查询中替换

到目前为止,我曾尝试过

 List Ids = new List(); **string filterField ="DEPARTMENT"; ==> Dynamic Field** var eParam = Expression.Parameter(typeof(EmployeeDetail), "e"); var comparison = Expression.Equal(Expression.Property(eParam, filterField), Expression.Convert(Expression.Constant(Ids), Expression.Property(eParam, filterField).Type)); var lambda = Expression.Lambda<Func>(comparison, eParam); var countMonthly1 = ctx.tblMonthlyInput.Join(ctx.tblEmployee, a => a.CompanyId, b => b.CompanyId, (a, b) => b).Where(lambda).Count(); 

我想使用linq表达式为Contains方法进行上述查询工作

样本查询:

 var countMonthly = (from a in ctx.tblMonthlyInput join b in ctx.tblEmployee on a.CompanyId equals b.CompanyId where categoryId.Contains(a.CategoryId) //want to make this dynamic select a).Count() == 0; 

这对你有用:

 void Main() { var filterField = "Id"; List Ids = new List(); var eParam = Expression.Parameter(typeof(EmployeeDetail), "e"); var method = Ids.GetType().GetMethod("Contains"); var call = Expression.Call(Expression.Constant(Ids), method, Expression.Property(eParam, filterField)); var lambda = Expression.Lambda>(call, eParam); } public class EmployeeDetail { public int Id { get; set; } } 

首先,在Ids类型上查找Contains方法。 然后我们简单地用Ids作为实例调用它,并将属性作为参数调用