欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

基于Dapper的开源Lambda扩展LnskyDB 2.0已支持多表查询

程序员文章站 2022-07-05 10:50:15
LnskyDB是基于Dapper的Lambda扩展,支持按时间分库分表,也可以自定义分库分表方法.而且可以T4生成实体类免去手写实体类的烦恼. v2.0版本支持多表查询了 ......

lnskydb 基于Dapper的开源Lambda扩展LnskyDB 2.0已支持多表查询 基于Dapper的开源Lambda扩展LnskyDB 2.0已支持多表查询

lnskydb是基于dapper的lambda扩展,支持按时间分库分表,也可以自定义分库分表方法.而且可以t4生成实体类免去手写实体类的烦恼.

文档地址: https://liningit.github.io/lnskydb/

开源地址: https://github.com/liningit/lnskydb

nuget地址: https://www.nuget.org/packages/lnskydb/

在此非常感谢skychensky其中lambda表达式的解析参考了他的开源项目

功能特点

  • lambda表达式查询方便
    基于dapper的lambda表达式扩展可以方便的进行查询筛选操作

  • 支持分库分表
    默认支持按年分库按月分表,也支持自定义分库分表.从此大数据不用愁

  • t4自动生成实体
    有t4模板自动生成实体类,再也不用手写那些烦人的实体类了.仓储类及接口也支持自动生成

  • 使用门槛低,快速上手
    使用非常简单,可以快速上手

连表查询

v2.0版本支持多表查询了
步骤如下

  1. 调用方法是通过iquery.outerjoin或者iquery.innerjoin进行连表查询,返回ijoinquery对象.
  2. 可以调用ijoinquery.and,or进行条件过滤.调用select返回iselectresult.
  3. 通过仓储的getlistgetpaging进行返回结果.
 var repository = getrepository();
var query = queryfactory.create<productsalebydaynsentity>(m => dbfunction.function<datetime>("isnull", m.updatedate, datetime.now) > new datetime(2019, 6, 26));
var jq = query.innerjoin(queryfactory.create<shopentity>(), m => m.shopid, m => m.sysno, (x, y) => new { sale = x, shop = y });
jq.and(m => m.shop.shopname.contains("店铺"));
jq.orderbydescing(m => m.sale.sales + 1);
jq.orderby(m => m.sale.productname + m.sale.outproductid);
jq.starsize = 10;
jq.rows = 5;
var res = jq.select(m => m.sale);
var paging = repository.getpaging(res);
//也可以下面这样返回dto.第二个参数表示第一个表是否要查询所有列.
var res2 = jq.select(m => new psdto { shopname = m.shop.shopname }, true);
var paging2 = repository.getpaging(res2);
var count = paging.totalcount;
var lst = paging.tolist();//或者paging.items