You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C# Core控制台应用中使用OData查询本地内存数据?

支持本地内存对象查询的OData库

微软官方的OData生态提供了完全脱离Web场景的独立组件,可以直接在控制台应用中解析OData查询字符串,转换为可作用于内存集合的LINQ查询,不需要依赖任何ASP.NET Core相关组件。

需要安装的NuGet包

仅需安装以下三个独立包即可:

  • Microsoft.OData.Core:OData核心协议实现
  • Microsoft.OData.ModelBuilder:EDM模型构造组件,无需依赖Web环境
  • Microsoft.OData.Linq:OData查询到LINQ表达式的转换组件
基础使用示例
  1. 首先定义你的业务实体类
public class Employee
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
    public string Department { get; set; }
}
  1. 构造实体对应的EDM模型(OData查询的元数据依据)
var modelBuilder = new ODataModelBuilder();
var employeeType = modelBuilder.EntityType<Employee>();
employeeType.HasKey(e => e.Id);
employeeType.Property(e => e.Name);
employeeType.Property(e => e.Age);
employeeType.Property(e => e.Department);
modelBuilder.EntitySet<Employee>("Employees");
var edmModel = modelBuilder.GetEdmModel();
  1. 解析OData查询并作用于内存集合
    假设你已有内存数据源,需要执行的OData查询字符串为$filter=Age ge 20 and Department eq '研发部'&$orderby=Age desc&$top=10
// 模拟内存数据源
IQueryable<Employee> employees = new List<Employee>
{
    new Employee { Id = 1, Name = "张三", Age = 22, Department = "研发部" },
    new Employee { Id = 2, Name = "李四", Age = 19, Department = "研发部" },
    new Employee { Id = 3, Name = "王五", Age = 27, Department = "市场部" },
    new Employee { Id = 4, Name = "赵六", Age = 25, Department = "研发部" }
}.AsQueryable();

// 解析OData查询字符串
var oDataUriParser = new ODataUriParser(edmModel, new Uri("Employees", UriKind.Relative), new Uri(odataQueryStr, UriKind.Relative));

// 解析过滤条件
var filterClause = oDataUriParser.ParseFilter();
var filterExpr = filterClause.ToExpression<Employee>();
var query = employees.Where(filterExpr);

// 解析排序条件
var orderByClause = oDataUriParser.ParseOrderBy();
query = orderByClause.ApplyTo(query) as IQueryable<Employee>;

// 解析分页条件
var top = oDataUriParser.ParseTop();
if (top.HasValue) query = query.Take(top.Value);
var skip = oDataUriParser.ParseSkip();
if (skip.HasValue) query = query.Skip(skip.Value);

// 执行查询得到结果
var result = query.ToList();
能力说明
  • 支持所有OData标准查询语法:$filter、$orderby、$select、$expand、$skip、$top、$count等,能力和Web场景下的OData完全一致
  • 可根据需求单独解析某一类查询条件,不需要每次都构造完整的查询逻辑
  • 所有组件都基于.NET Standard实现,完全兼容.NET Core/.NET 5+的控制台应用

内容的提问来源于stack exchange,提问作者quillbreaker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 23:36:02