提问者:小点点

使用funct,bool>构建动态LINQ where表达式


所以,我想知道是否可以在C#中做下一件事:

我有一个DB模型--假设它是:

public class Car {
  public string Id {get;set;}
  public string Name {get;set}
}

中该类型的DbSet:

public DbSet<Car> Cars {get;set;}

我还有一个

public class CarDto {
  public string Id {get;set;}
  public string Name {get;set}
}

问题是--有可能用不同的IN对象动态构建linq WHERE表达式吗?

null

var select = new Func<CarDto, bool>(car => car.Name == "BMW");

// And somehow use this expression for other type Car
someDbContext.Cars.Where(select);

共1个答案

匿名用户

null

private static Expression<Func<T, bool>> BuildCondition<T>(string name)
{
    var carParameter = Expression.Parameter(typeof(T), "car");
    var propertyAccess = Expression.Property(carParameter, "Name");
    var equalsTest = Expression.Equal(propertyAccess, Expression.Constant(name));
    return Expression.Lambda<Func<T, bool>>(equalsTest, carParameter);
}

你会把它叫做:

someDbContext.Cars.Where(BuildCondition<CarDto>("BMW"));

我们通过使用类上的helper方法手动构造表达式。了解这些信息最简单的方法是做以下事情:

Expression<Func<CarDto, bool>> expr = x => x.Name == "BMW";

然后在调试器中检查,您将了解表达式是如何组合在一起的。