Создание динамических выражений C#C#

Место общения программистов C#
Anonymous
Создание динамических выражений C#

Сообщение Anonymous »

Я хотел бы получить свойство из базы данных динамически на основе выражений.
У меня есть список Expression, который просто указывает на различные типизированные свойства модели.

Код: Выделить всё

public class Employee: IEmployee {

public int Id { get; set; }
public string Name { get; set; }
public DateTime CreatedOn { get; set; }
}
У меня есть список выражений из этой модели, который выглядит так:

Код: Выделить всё

x => x.Name,
x => x.CreatedOn
Они сохраняются как Expression, что означает, что они являются внутренними по отношению к выражению, которое мы преобразуем

Код: Выделить всё

x => Convert(x.CreatedOn)
Что во многом эквивалентно

Код: Выделить всё

x => (object)x.CreatedOn
В структуре сущностей это не будет работать, поскольку для работы EF требуется EDM.PrimitiveType. Поэтому я удалил преобразование, чтобы выражение напрямую указывало на свойство. Посмотрите это, чтобы увидеть, как работает StripConvert.
Когда я удаляю преобразование, у меня остается необработанное выражение или лямбда-выражение, которое нельзя использовать из оператора выбора, например

Код: Выделить всё

protected Expression[] expressions;

foreach(var exp in expressions) {
var context = new DbEntites();
var rawExp = exp.StripConvert();
// This does not work since Select expects an explicit return type from the expression
var myVal = context.Employees.Select(rawExp).FirstOrDefault();
}
В конце концов, мне просто нужен объект, однако использование выражения для obj не работает, поскольку ef зависит от EDM.PrimitiveType.
Итак, как я могу извлечь данные из структуры сущности, используя выражение, не зная типа.
Примечание: Я, вероятно, смогу построить это, используя отражение, но мне бы хотелось этого избежать делаю что-то подобное. **

Подробнее здесь: https://stackoverflow.com/questions/784 ... n-building

Вернуться в «C#»