#c#
#c#
Вопрос:
Я создаю динамическую фильтрацию по списку. Я получу предикат из пользовательского интерфейса (например, «Name == «Australia»»), и код должен отфильтровать список. Он отлично работает для оператора «==». Однако я борюсь с приведенными ниже условиями и не уверен, как пользовательский интерфейс передаст приведенные ниже условия в предикате.
- Содержит
- Начинается с
- Завершается
- Не равно
- Больше, чем
- Меньше, чем
- Между
Я скопировал свой исходный код ниже. Помощь здесь была бы признательна.
class Program
{
static void Main(string[] args)
{
var lst = new List<Myclass>();
lst.Add(new Myclass { Name = "Australia", Id = 1, Dt = System.DateTime.Now.AddDays(10) });
lst.Add(new Myclass { Name = "USA", Id = 2, Dt = System.DateTime.Now.AddDays(5) });
lst.Add(new Myclass { Name = "India", Id = 3, Dt = System.DateTime.Now});
var result = lst.AsQueryable().Where(DynamicExpression.ParseLambda<Myclass, bool>("Name == "Australia""));
var r = result.ToList();
}
}
public class Myclass
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime Dt { get; set; }
}
Я думаю, что нашел предикат, который мне нужен.
Text Field Equal To = string exp = "(Name ="India")";
Text Field NOT Equal To = string exp = "(Name !="India")";
Text Field Contains = string exp = "(Name.Contains ("Ind"))";
Text Field Starts With = string exp = "(Name.StartsWith ("Ind"))";
Text Field Ends With = string exp = "(Name.EndsWith ("a"))";
Number Field Equal to = string exp = "(Id = 1)";
Number Field Between with multiple conditions = string exp = "(Id > 1 AND Id <= 3) OR Id =3";
Number Field Between and greater than equal to = string exp = "(Id > 1 AND Id >= 3)";
Date Field Between = string exp = "(Dt > Convert.ToDateTime("2/5/2021 4:46:04 AM") AND Dt >= Convert.ToDateTime("2/3/2021 4:46:04 AM"))";
Комментарии:
1. «Однако я борюсь с нижеприведенными условиями» — что вы пробовали и что получилось?
2. Я пробовал использовать предикат «Name Like «%Australia%»», но он выдает исключение.. Я не уверен, как написать предикат для like.
3. Какое исключение он выдает? Какой тип исключения и сообщение?
4. Этот вопрос можно закрыть, поскольку я нашел решение своей проблемы. Я обновил свой вопрос ответом.
5. @Machindra Не стесняйтесь публиковать его как фактический ответ ниже — ответ на ваш собственный вопрос также означает, что вы можете принять ответ (вы получаете rep вопрос больше не указан как «без ответа»)
Ответ №1:
Я думаю, что нашел предикат, который мне нужен.
Text Field Equal To = string exp = "(Name ="India")";
Text Field NOT Equal To = string exp = "(Name !="India")";
Text Field Contains = string exp = "(Name.Contains ("Ind"))";
Text Field Starts With = string exp = "(Name.StartsWith ("Ind"))";
Text Field Ends With = string exp = "(Name.EndsWith ("a"))";
Number Field Equal to = string exp = "(Id = 1)";
Number Field Between with multiple conditions = string exp = "(Id > 1 AND Id <= 3) OR Id =3";
Number Field Between and greater than equal to = string exp = "(Id > 1 AND Id >= 3)";
Date Field Between = string exp = "(Dt > Convert.ToDateTime("2/5/2021 4:46:04 AM") AND Dt >= Convert.ToDateTime("2/3/2021 4:46:04 AM"))";