我正在尝试构建一个实体框架 4 多对多关系过滤器,这是一个动态数据项目。我知道我需要在运行时构建一个表达式树,并且我很熟悉这样的简单 where 表达式:
private MethodCallExpression BuiltMethodCall(IQueryable _query, Type _ObjType, string _ColumnToSearch, string _SearchValue)
{
ConstantExpression value = Expression.Constant(_SearchValue);
ParameterExpression _parameter = Expression.Parameter(_ObjType, "value");
MemberExpression _property = Expression.Property(_parameter, _ColumnToSearch);
BinaryExpression comparison = Expression.Equal(_property, value);
LambdaExpression lambda = Expression.Lambda(comparison, _parameter);
//Ex: Customers.Select(c => c).Where(value => (value.City == "Seattle"))
MethodCallExpression _where = Expression.Call(typeof(Queryable), "Where", new Type[] { _query.ElementType }, new Expression[] {
_query.Expression,
Expression.Quote(lambda)
});
return _where;
}
为简单起见,这些示例使用了 Northwind 数据库,其中存在 (Customers <- CustomerCustomerDemo -> CustomerDemographics) 的多对多连接。我遇到的问题是当存在如下表达式中的嵌套 lambda 时构建表达式树,我在其中检索具有特定客户人口统计的所有客户。
string custDemogID = "3";
//Get customers who have a particular demog
dynamic cust = context.Customers.Where(c => c.CustomerDemographics.Any(cd => cd.CustomerTypeID == custDemogID));
如何构建具有“where”调用的表达式树,其中包括“Any”的嵌套 lambda?任何帮助表示赞赏,即使它是关于如何做到这一点的伪代码。没有太多关于这个的,我很绝望,请帮助!