包含的 LINQ 表达式
LINQ Expression for Contains
我想在 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;
这对你有用:
void Main()
{
var filterField = "Id";
List<int> Ids = new List<int>();
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<Func<EmployeeDetail, bool>>(call, eParam);
}
public class EmployeeDetail
{
public int Id { get; set; }
}
首先,您在 Ids
的类型上查找 Contains
方法。然后我们简单地以 Ids
作为实例调用它,并将 属性 作为参数
我想在 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;
这对你有用:
void Main()
{
var filterField = "Id";
List<int> Ids = new List<int>();
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<Func<EmployeeDetail, bool>>(call, eParam);
}
public class EmployeeDetail
{
public int Id { get; set; }
}
首先,您在 Ids
的类型上查找 Contains
方法。然后我们简单地以 Ids
作为实例调用它,并将 属性 作为参数