C# фильтр списка с использованием динамической библиотеки запросов?
Я использую общую функцию для фильтрации списка записей.
функция ниже:
class FilterRecords
{
public static object ParseExpression(string Condition, string FilterColumn)
{
string _operator = "";
string _condition = "";
if (Condition.Substring(0, 1) == "<" || Condition.Substring(0, 1) == ">")
{
_operator = Condition.Substring(0, 1);
if (Condition.Substring(1, 1) == "=")
{
_operator += "=";
_condition = Condition.Substring(2);
}
else
{
_condition = Condition.Substring(1);
}
_operator = "=";
return (dbContext.OrdsRlsds.AsQueryable().Where(FilterColumn + " " + _operator + " " + " @0", _condition).ToList());
}
else
{
if (Condition.Contains(','))
{
string[] conds = Condition.Split(',');
return (dbContext.OrdsRlsds.AsQueryable().Where(FilterColumn + " >= @0 && " + FilterColumn + " <= @1", conds).ToList());
}
else
{
return (dbContext.OrdsRlsds.AsQueryable().Where(FilterColumn + " == @0", Condition).ToList());
}
}
}
}
Эта функция использует динамическую библиотеку запросов. На данный момент он фильтрует только один тип записей - OrdsRlsds. Мне нужно сделать этот фильтр универсальным, чтобы я мог передать любую коллекцию и затем вернуть отфильтрованные результаты.
1 ответ
Решение
Вы используете Entity Framework? Если так, то не могли бы вы сделать что-то подобное с генериками?
public static IList<T> ParseExpression<T>(string Condition, string FilterColumn) where T:class
{
var query = dbContext
.CreateObjectSet<T>()
.AsQueryable();
//add filters etc.
return query.ToList();
}
Затем вам нужно будет передать требуемый тип сущности в качестве аргумента типа в ваш метод следующим образом:
FilterRecords.ParseExpression<OrdsRlsd>(condition, filterColumn);