Шаблон репозитория Entity Framework Динамическое предложение «где» и «или где»C#

Место общения программистов C#
Ответить
Anonymous
 Шаблон репозитория Entity Framework Динамическое предложение «где» и «или где»

Сообщение Anonymous »

Использование динамического выраженияwhere здесь
Основное динамическое предложение Entity Framework Where
Я могу указать где для любого столбца в любой таблице, доступ осуществляется по имени свойства с использованием шаблона типизированного репозитория Entity Framework. Однако это будет И каждый раз, когда существует более одного места, когда это должно быть ИЛИ ГДЕ, когда в столбце более одного места.
Как это нужно изменить, чтобы это сделать OR WHERE, когда для имени свойства имеется более одного значения свойства?
Массив имен свойств и имен свойств циклически вызывает этот метод.

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

    private static IQueryable AddWhereClause( IQueryable query, string propName, string propValue )
{
ParameterExpression parameterExpression = Expression.Parameter( typeof( T ), "e" );
Expression makePropPath = MakePropPath( parameterExpression, propName );

ConstantExpression value = null;

string dataPropertyType = typeof( T ).GetProperties()
.FirstOrDefault( pi => pi.Name == propName )?.PropertyType.FullName;

if (dataPropertyType.Contains( "System.String" ))
{
value = Expression.Constant( propValue, typeof( string ) );
}
else if (dataPropertyType.Contains( "System.Int" ))
{
int? valueCast = Convert.ToInt32( propValue );
value = Expression.Constant( valueCast, typeof( int? ) );
}
else if (dataPropertyType.Contains( "System.Double" ))
{
double? valueCast = Convert.ToDouble( propValue );
value = Expression.Constant( valueCast, typeof( double? ) );
}
else if (dataPropertyType.Contains( "System.Boolean" ))
{
bool? valueCast = Convert.ToBoolean( propValue );
value = Expression.Constant( valueCast, typeof( bool? ) );
}

BinaryExpression body = Expression.Equal( makePropPath, value );
Expression predicateLambda = Expression.Lambda( body, parameterExpression );
return query.Where( predicateLambda );
}
Однако

Подробнее здесь: https://stackoverflow.com/questions/793 ... ere-clause
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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