Я пишу небольшой проект, использующий .net Core и Entity Framework.
Мне нужен динамический фильтр для IQueryable<T>
.
У меня есть перечисления, которые определяют операторы
public enum QueryOperatorEnums
{
Equal = 0,
NotEqual = 1,
Constant = 2,
LessThan = 3,
GreaterThan = 4,
LessThanOrEqual = 5,
GreaterThanOrEqual = 6,
}
И у меня есть расширения IQueryable
:
public static IQueryable<T> Filter<T>(this IQueryable<T> query, Dictionary<string, KeyValuePair<QueryOperatorEnums, object>> keyValuePairs)
{
if (keyValuePairs == null)
return query;
foreach (var keyValuePair in keyValuePairs)
{
var propertyInfo = typeof(T).GetProperty(keyValuePair.Key);
if (propertyInfo != null)
{
var operation = keyValuePair.Value;
switch (operation.Key)
{
case QueryOperatorEnums.Constant:
break;
case QueryOperatorEnums.Equal:
query = query.Where(obj => propertyInfo.GetValue(obj, null).Equals(operation.Value));
break;
case QueryOperatorEnums.GreaterThan:
break;
case QueryOperatorEnums.GreaterThanOrEqual:
break;
case QueryOperatorEnums.LessThan:
break;
case QueryOperatorEnums.LessThanOrEqual:
break;
case QueryOperatorEnums.NotEqual:
break;
default:
break;
}
}
}
return query;
}
Что я могу сделать, чтобы реализовать для особых случаев?Потому что значение свойства является динамическим во время выполнения.Я не могу определить тип для использования <=
, >=
...
Спасибо за вашу поддержку