Код: Выделить всё
var p = PersonDbSet.FirstOrDefault(i=>i.Id = 3);
Сначала предикат
Код: Выделить всё
ParameterExpression parameter = Expression.Parameter(entityType, "Id");
MemberExpression property = Expression.Property(parameter, 3);
ConstantExpression rightSide = Expression.Constant(refId);
BinaryExpression operation = Expression.Equal(property, rightSide);
Type delegateType = typeof (Func).MakeGenericType(entityType, typeof (bool));
LambdaExpression predicate = Expression.Lambda(delegateType, operation, parameter);
Код: Выделить всё
var method = typeof (System.Linq.Queryable).GetMethods(BindingFlags.Static | BindingFlags.Public)
.FirstOrDefault(m => m.Name == "FirstOrDefault" && m.GetParameters().Count() == 2);
MethodInfo genericMethod = method.MakeGenericMethod(new[] { entityType });
Код: Выделить всё
object retVal = genericMethod.Invoke(null, new object[] {dbSet, predicate});
"Объект типа 'System.Reflection.RuntimePropertyInfo' невозможно преобразовать в тип 'System.Linq.IQuerable`1[Person]'».
Есть мысли?>
Подробнее здесь: https://stackoverflow.com/questions/215 ... reflection
Мобильная версия