私はデータベースを照会するためのラムダ関数を動的に作成する.Find(objects [] keys)メソッドを実行しています。Func <object []、Expression <Func<T,bool> >> dynamicを実行するにはどうすればよいですか?
基本的に私が欲しいものです:
var mykeys = new Guid("37ec1659-b35e-46c9-a7fc-e9802644ca1a");
IQueryable<T> database ;
Func<object[],Expression<Func<T,bool>>> objectFinder = CreateKeyExpression(typeof(T));
var foundObject = database.FirstOrDefault(objectFinder(mykeys));
と
private LambdaExpression CreateKeyExpression(Type C1Type)
{
ParameterExpression instanceParameter = Expression.Parameter(C1Type);
ParameterExpression keyParameters = Expression.Parameter(typeof(object[]));
PropertyInfo[] objectKeys = C1Type.GetKeyProperties().ToArray();
var expr = Expression.Equal(Expression.TypeAs(Expression.Property(instanceParameter,objectKeys[0]),typeof(object)),
Expression.ArrayIndex(keyParameters,Expression.Constant(0)));
for (int i = 1; i < objectKeys.Length; i++)
{
expr = Expression.AndAlso(expr, Expression.Equal(
Expression.Property(instanceParameter,objectKeys[i]),
Expression.ArrayIndex(keyParameters,Expression.Constant(i))
));
}
var lmp= Expression.Lambda(expr, instanceParameter);
return Expression.Lambda(lmp, keyParameters);
}
私はこれを達成する方法の任意のアイデア?上記は私にを与え、IQueryableをIEnumerableにします。つまり、データベースの最後では実行しません。
興味深い、私は少し違っそれを解決しました。 CreateKeyExpressionにobject []パラメータを入れることはオプションではありませんでした。私はFunc