返回

FreeSql ORM 超强查询功能详解,助你轻松玩转数据

见解分享

引子

FreeSql ORM 作为一款轻量、高性能的 .NET ORM 框架,在查询数据方面可谓下足了功夫,链式查询语法、多表查询、表达式函数的支持都非常到位。本文将详细解析 FreeSql 的查询功能,让你轻松玩转数据。

链式查询语法

FreeSql 的链式查询语法简洁优雅,类似于 LINQ 的写法。通过一个又一个的 Where、OrderBy、Skip、Take 等方法,可以轻松构建复杂的查询语句。

例如,以下代码查询订单表中价格大于 100 元且状态为已发货的订单:

var orders = _db.Order
    .Where(o => o.Price > 100)
    .Where(o => o.Status == OrderStatus.Shipped)
    .ToList();

多表查询

FreeSql 支持灵活的多表查询,你可以使用 Join 方法关联不同的表,并通过 On 方法指定关联条件。

例如,以下代码查询订单表中包含特定商品的订单:

var orders = _db.Order
    .Join(_db.OrderItem, o => o.Id, oi => oi.OrderId, (o, oi) => new { o, oi })
    .Where(p => p.oi.ProductId == 1)
    .ToList();

表达式函数支持

FreeSql 提供了丰富的表达式函数,包括数学函数、字符串函数、聚合函数等,可以帮助你轻松处理数据。

例如,以下代码查询订单表中每种商品的总销售额:

var result = _db.Order
    .GroupBy(o => o.ProductId)
    .Select(g => new { ProductId = g.Key, TotalSales = g.Sum(o => o.Price) })
    .ToList();

其他查询特性

除了上述功能外,FreeSql 还支持:

  • 分页查询
  • 延迟加载
  • 动态查询
  • 事务管理
  • 并发控制

案例演示

下面是一个使用 FreeSql 查询数据的实际案例:

// 查询所有订单
var orders = _db.Order.ToList();

// 查询特定客户的订单
var customerOrders = _db.Order
    .Where(o => o.CustomerId == 1)
    .ToList();

// 查询订单详情
var orderDetails = _db.OrderDetail
    .Where(od => od.OrderId == 1)
    .ToList();

// 查询订单总销售额
var totalSales = _db.Order
    .Sum(o => o.Price);

总结

FreeSql ORM 的查询功能强大灵活,可以满足各种复杂的查询需求。通过链式查询语法、多表查询、表达式函数的支持,你可以轻松高效地获取数据,为你的应用程序提供强有力的数据支持。