Я хочу, чтобы динамическое создание выражения, которое по сути является селектором свойств.Динамическое создание выражения, которое выбирает свойство объектов
Я пытаюсь использовать это, чтобы я мог предоставить гибкий пользовательский интерфейс поиска, а затем перевести выбранные параметры поиска в запрос Entity Framework.
У меня есть большая часть того, что мне нужно, благодаря другой библиотеке, которую я использую, но мне не хватает финальной части, которая переводит параметры строки запроса в соответствующий селектор выражений, который требуется другой библиотеке.
Библиотека принимает аргумент:
Expression<Func<TObject, TPropertyType>>
Пример того, как это будет кодироваться, если запеченные в приложение будет:
Expression<Func<MyObject, int>> expression = x=> x.IntegerProperty;
Однако, мне нужно, чтобы иметь возможность генерировать это выражение динамически, поскольку важным моментом является то, что все, что я буду знать, это тип объекта (MyObject) и имя свойства как строковое значение («IntegerProperty»). Значение свойства, очевидно, будет отображено на свойство объекта, которое может быть любого не сложного типа.
Так что, по-моему, я хочу найти способ динамически выражать выражение, которое указывает правильное свойство объекта для возврата и где возвращаемое значение определяется этим типом свойства.
код псевдо:
string ObjectPropertyName
Type ObjectType
Type ObjectPropertyType = typeof(ObjectType).GetProperty(ObjectPropertyName).Property
Expression<Func<[ObjectType], [ObjectPropertyType]>> expression = x=> x.[ObjectPropertyName];
Update:
я дошел до этого
ParameterExpression objectParameter = Expression.Parameter(type, "x");
MemberExpression objectProperty = Expression.Property(objectParameter, "PropertyNameString");
Expression<Func<ObjectType, int>> expression = Expression.Lambda<Func<ObjectType, int>>(objectProperty, objectParameter);
Но проблема у меня с этим является то, что тип возвращаемого значения не всегда является int, но может быть и другим типом.
У вас есть 'ObjectType' как параметр' Type' или общий тип? Как вы собираетесь называть правильную версию метода в библиотеке? –
У вас есть класс ExpressionBuilder для таких вещей, но я думаю, что может быть более простой способ решить вашу проблему. Какая библиотека является «другой библиотекой» и какой метод вы вызываете в каком классе? – Tewr
У меня есть ObjectType в качестве типичного параметра типа – Kramer00