我希望在linq中添加动态表达式,但是在contains方法上遇到了问题,对于Equal方法它可以完美地工作。
问题在于我正在动态获取FilterField
,如何在查询中替换它。
到目前为止,我已经尝试过:
List<int> Ids = new List<int>();
**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<EmployeeDetail, bool>>(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;
List.Contains
方法并通过Expression.Call()
调用它。 - Roba.CategoryId
) 动态化。 - Nilesh Gajare