Я могу найти много информации о том, как изменить тело выражения, но я не могу найти ничего о том, как изменить ReturnType.Как преобразовать выражение <Func <T, object>> в выражение <Func <T, bool>>?
Вот код, который я написал, включающий вызов процедуры Convert, приведенной ниже.
private T[] CheckCreatedOnDate<T>(Expression<Func<T, object>> fieldExpression, T[] input, Data.Context context) where T : Entity
{
var fieldDelegate = fieldExpression.Compile();
Expression<Func<T, bool>> predicateExpression = Convert(fieldExpression);
Func<T, bool> predicateDelegate = predicateExpression.Compile();
Predicate<T> predicate = predicateDelegate.Invoke;
DbSet<T> dbSet = context.Set<T>();
var data = dbSet.ToList();
foreach (T inputRecord in input)
{
var fieldObject = fieldDelegate.Invoke(inputRecord);
var dataRecord = data.SingleOrDefault(x => Equals(predicate, fieldObject));
if (dataRecord != null)
{
inputRecord.CreatedOn = dataRecord.CreatedOn;
}
}
return input;
}
Этот метод должен вести себя очень похоже на метод AddOrUpdate в EF, однако это один просто заменить дату createdOn, если запись уже в Дб.
Мой код однако все еще не работает. Созданный предикат не кажется правильным, поскольку он никогда не находит соответствующую запись в Db.
Вся помощь очень ценится.
Приветствия Майк
Что вы попробовали? Какова ваша конкретная проблема, где вы застряли? – nvoigt
хорошо, я не думаю, что возвращаемый тип функции, которую вы меняете во время выполнения –
Также вы можете добавить немного кода, например, само выражение – UrbanEsc