Итак... описанные выше методы поиска отлично сработали, но если в вашей модели нет столбца с именем "Id", все это приведет к сбою в следующей строке. Я не уверен, почему OP поместил в это место жестко запрограммированное значение.
Expression.Property(parameter, "Id"),
Вот редакция, которая исправит это для тех, кто правильно называет наши столбцы идентификаторов. :)
var keyCompare = key.Properties[0].Name;
// TODO: Build the real LINQ Expression
// set.Where(x => x.Id == keyValues[0]);
var parameter = Expression.Parameter(typeof(TEntity), "x");
var query = set.Where((Expression<Func<TEntity, bool>>)
Expression.Lambda(
Expression.Equal(
Expression.Property(parameter, keyCompare),
//Expression.Property(parameter, "Id"),
Expression.Constant(keyValues[0])),
parameter));
// Look in the database
return query.FirstOrDefault();
}
Это ЕЩЕ вполне может потерпеть неудачу, если у вас есть более одной настройки ключа для объекта сущности, и ключ, который вы ищете, не является первым, но в этом случае он должен быть немного лучше.
person
Bryan - S
schedule
10.02.2016
Find
. - person Gerardo Grignoli   schedule 18.11.2016