Entity Framework 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;
}
簡単にするために、これらの例では、(Customers <- CustomerCustomerDemo -> CustomerDemographics) の多対多の結合がある Northwind データベースを使用します。私が問題を抱えているのは、特定の顧客人口統計を持つすべての顧客を取得している以下の式のように、ネストされたラムダがある場合に式ツリーを構築することです。
string custDemogID = "3";
//Get customers who have a particular demog
dynamic cust = context.Customers.Where(c => c.CustomerDemographics.Any(cd => cd.CustomerTypeID == custDemogID));
「Any」のネストされたラムダを含む「where」呼び出しを持つ式ツリーを構築するにはどうすればよいですか? たとえそれがそれを行う方法に関する疑似コードであっても、どんな助けも大歓迎です。これについてはあまり何もありません。私は必死です。助けてください!