【问题标题】:How to filter entities using queries in C#?如何使用 C# 中的查询过滤实体?
【发布时间】:2018-03-14 23:29:07
【问题描述】:

我需要创建允许用户使用文字查询过滤实体的功能(即age gt 20 and name eq 'john')。在 C#/Asp.Net MVC 中是否提供了执行此操作的功能,还是我必须自己解析此查询?

我发现 OData 意味着具有完全这样的功能 (OData Filter Expressions MSDN)。但是,我不熟悉它,所以我不知道如何在我的项目中实现这种行为。

我需要这样的东西:

var list = new List<Person>
{ 
  new Person { Name = "John", Age = 30 },
  new Person { Name = "Hanna", Age = 25 },
  new Person { Name = "John", Age = 15 }
 };

string query = "age gt 20 and name eq /'John/'";
IEnumerable<Person> result = list.FilterByExpression(query); 
// returns list with John aged 30

任何建议将不胜感激。

【问题讨论】:

    标签: c# .net asp.net-mvc odata filtering


    【解决方案1】:

    Nuget 上有一个名为Linq2Rest 的包,其中包含一个名为FilterIEnumerable 扩展方法。您可以传递使过滤器发生所需的过滤器字符串。在内部,它将被转换为Expression Tree,并将与现有的可枚举扩展方法一起使用。

    示例:

    var filteredSource = source.Filter(Request.Params);
    

    请参阅这篇文章Creating a .Net queryable client for ASP.Net Web API oData services,了解如何使用库JSON.NetLinq2Rest 来解决此问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-18
      相关资源
      最近更新 更多