Основное динамическое предложение 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
Мобильная версия