C# LLSQL快速查询框架
介绍一种新类型查询方法,类似linq,lambda语法,类似标准的sql使用习惯,支持匿名类型,泛型,目前支持mssql,mysql,
切换只需要DatabaseConfig.DatabaseType = DatabaseType.SQLServer;无需改任何代码,dll后续开放下载
使用说明:基于实体查询,实体名和表名相同,实体需要使用代码生成器生成,工具后续开放下载
只需要生成所有表的实体,其它数据任意查,不需要手写任何Model,
查询结果
public class Student
{
public int ID { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public bool IsGraduate { get; set; }
public string Grade { get; set; }
public decimal Money { get; set; }
}
表对应实体
/// <summary>
/// 单表查询
/// </summary>
public static void single_able()
{
using (var sql = new SqlModel<T_BAS_Areas>())
{
//!+常用方法
/*
*使用说明
*数据查询方法,只有调用后才会有数据返回
*ToDataTable(),ToList(),ToPageList(),First(),FirstOrDefault()
*/
//?查默认一条数据
var data1 = sql
.SqlSelect(a => new { a.AreaName, a.AreaCode })
.FirstOrDefault();
//?所有字段查询
var data1_1 = sql
.SqlSelect()
.FirstOrDefault();
//查询top 10
var data1_2 = sql
.SqlSelect()
.SqlTop()
.ToList();
//?DataTable
var data2 = sql
.SqlSelect(a => new { a.AreaName, a.AreaCode })
.ToDataTable();
//?List
var data3 = sql
.SqlSelect(a => new { a.AreaName, a.AreaCode })
.ToList();
//?分页
var data4 = sql
.SqlPage(a => new { a.AreaName, a.AreaCode })
.ToPageList();
var data4_1 = sql
.SqlPage(a => new { a.AreaName, a.AreaCode }, , )
.ToPageList();
//?count
var data5 = sql
.SqlCount(a => a.AreaCode == "");
//?sum
var data6 = sql
.SqlSum(a => new { a.AreaCode })
.First(); //?无锁查询
var data7 = sql
.SqlSelect(a => new { a.AreaName, a.AreaCode }, LockType.NOLOCK)
.FirstOrDefault();
//?指定索引查询
var data8 = sql
.SqlSelect(a => new { a.AreaName, a.AreaCode }
, "PK_T_BAS_AREAS")
.FirstOrDefault(); //?条件查询
var data9 = sql
.SqlSelect(a => new { a.AreaName, a.AreaCode })
.SqlWhere(a => a.ParentAreaCode == "" && a.AreaName.SqlLike("九江"))
.FirstOrDefault();
//? 查前10条并排序
var data10 = sql
.SqlSelect(a => new { a.AreaName, a.ParentAreaCode, a.AreaCode })
.SqlTop()
.SqlOrderBy(b => new { b.ParentAreaCode, b.AreaCode })
.ToList();
var data11 = sql
.SqlSelect(a => new { a.AreaName, a.ParentAreaCode, a.AreaCode })
.SqlTop()
.SqlOrderDescBy(b => new { b.ParentAreaCode, b.AreaCode })
.ToList();
//? 查前10%条并排序
var data12 = sql
.SqlSelect(a => new { a.AreaName, a.ParentAreaCode, a.AreaCode })
.SqlPercent().SqlOrderBy(b => new { b.ParentAreaCode }).ToList();
data12 = sql.SqlSelect(a => new { a.AreaName, a.ParentAreaCode, a.AreaCode })
.SqlPercent()
.SqlOrderDescBy(b => new { b.ParentAreaCode })
.SqlOrderBy(c => new { c.AreaCode })
.ToList(); //?查前10条不重复的项
var data13 = sql
.SqlSelect(a => new { a.ParentAreaCode, a.AreaCode })
.SqlDistinct()
.SqlTop()
.ToList(); //!更新
sql.SqlUpdate(a => new object[] { a.AreaName == "溪湖区" },//a.SqlFunc("AreaCode='2'")
b => b.AreaGuidGuid == Guid.Parse("949B2F9D-F730-48ED-8B58-000144166BE9")); //!添加
T_BAS_Areas area = new T_BAS_Areas()
{
AreaGuidGuid = Guid.NewGuid(),
AreaCode = "",
AreaName = "测试",
ParentAreaCode = "-1",
};
sql.SqlAdd(area);
//!删除
sql.SqlDelete(a => a.AreaGuidGuid == area.AreaGuidGuid); //where 查询
var data14 = sql
.SqlSelect(a => new { a.AreaName, a.AreaCode })
.SqlWhere(a => a.AreaName.SqlLike("六一") && a.AreaCode.SqlFunc("AreaCode=1"))
.ToList();
var data141 = sql
.SqlSelect(a => new { a.AreaName, a.AreaCode })
.SqlWhere(a => a.AreaName.SqlLike("%{0}?", "六一")
&& a.AreaCode.SqlFunc("AreaCode='1'")//a.SqlFunc("AreaCode='1'")
|| a.AreaCode.SqlFunc("AreaCode=Parent"))
.ToList();
}
}
单表查询
/// <summary>
/// 多表查询
/// </summary>
public static void multilist_table()
{ using (var sql = new SqlModel<T_ST_Role, T_ST_Role_Permission>())
{
int count;
var left = sql.SqlSelect((a, b) => new { NameTest = a.RoleName, b.PermissionCode })
.SqlJionLeft((a, b) => b)
.SqlOn((a, b) => a.RoleGuid == b.RoleGuid)
.SqlOrderBy((a, b) => b.PermissionCode)
.SqlWhere((a, b) => a.RoleCode == "")
.ToList();
count = left.Count; var right = sql.SqlSelect((a, b) => new { NameTest = a.RoleName, b.PermissionCode })
.SqlJionRight((a, b) => b)
.SqlOn((a, b) => a.RoleGuid == b.RoleGuid)
.ToList(); var full = sql.SqlSelect((a, b) => new { NameTest = a.RoleName, b.PermissionCode, })
.SqlJionFull((a, b) => b)
.SqlOn((a, b) => a.RoleGuid == b.RoleGuid)
.ToList(); var inner = sql.SqlSelect((a, b) => new { NameTest = a.RoleName, b.PermissionCode })
.SqlJionInner((a, b) => b)
.SqlOn((a, b) => a.RoleGuid == b.RoleGuid)
.ToList(); var page = sql.SqlPage((a, b) => new { a.RoleGuid, NameTest = a.RoleName, b.PermissionCode }, , )
.SqlJionLeft((a, b) => b).SqlOn((a, b) => a.RoleGuid == b.RoleGuid)
.SqlWhere((a, b) => a.RoleCode == "R000001")
.SqlOrderBy((a, b) => b.PermissionCode)//.SqlOrderBy(o => new { o.PermissionCode })
.ToPageList(); } using (var sql = new SqlModel<T_ST_Role, T_ST_Role_Permission, T_ST_Permission, T_ST_User_Role>())
{
var data = sql.SqlSelect((a, b, c, d) => new { a.RoleGuid, a.RoleName, b.Role_PermissionGuid, c.PermissionCode })
.SqlJionLeft((a, b, c, d) => b).SqlOn((a, b, c, d) => a.RoleGuid == b.RoleGuid)
.SqlJionRight((a, b, c, d) => c).SqlOn((a, b, c, d) => b.PermissionGuid == c.PermissionGuid)
.SqlJionLeft((a, b, c, d) => d).SqlOn((a, b, c, d) => a.RoleGuid == d.RoleGuid)
.ToList(); var page = sql.SqlPage((a, b, c, d) => new { a.RoleGuid, a.RoleName, b.Role_PermissionGuid, c.PermissionCode })
.SqlJionLeft((a, b, c, d) => b).SqlOn((a, b, c, d) => a.RoleGuid == b.RoleGuid)
.SqlJionRight((a, b, c, d) => c).SqlOn((a, b, c, d) => b.PermissionGuid == c.PermissionGuid)
.SqlJionLeft((a, b, c, d) => d).SqlOn((a, b, c, d) => a.RoleGuid == d.RoleGuid)
.ToPageList();
}
}
多表查询
/// <summary>
/// groupby case when then
/// </summary>
public static void groupby_casewhenthe()
{
using (var sql = new SqlModel<Students>())
{
//case when then查询方式1
//CASE WHEN age=16 THEN '16岁' WHEN age=18 THEN '18岁' WHEN age=20 THEN '20岁'else '可选' END AS remark
var casewh = sql
.SqlNewSelect(a =>
new
{
a.Name,
Remark = a.CaseWhen(b => b.Age == ).Then("16岁").When(b => b.Age == ).Then("18岁").When(b => b.Age == ).Then("20岁").Else("其它").End()
}).First();
//case when then查询方式2 多条件选择
//CASE Age WHEN 16 THEN '16岁' WHEN 18 THEN '18岁' WHEN 20 THEN '20岁'else '可选' END AS remark
var casewh2 = sql
.SqlNewSelect(a =>
new
{
a.Name,
Remark = a.Case(a.Age).When().Then("16岁").When().Then("18岁").When().Then("20岁").Else("其它").End()
}).First();
//group by查询
var fun = sql
.SqlNewSelect(a => new
{
a.Name,
asName = a.Name.SqlCount(),
asAge = a.Age.SqlSum(),
asMaxAge = a.Age.SqlMax(),
asMinAge = a.Age.SqlMin(),
asAvg = a.Age.SqlAVG()
})
.SqlWhere(a => a.Age == )
.SqlGroupBy(a => new { a.Name, a.Age })
.SqlHaving(a => a.Name == "name_1500081")
.SqlOrderBy(a => a.Name).First(); Console.WriteLine(fun.asMaxAge + casewh.Name);
}
}
Group查询,Case查询
C# LLSQL快速查询框架的更多相关文章
- 如何:使用TreeView控件实现树结构显示及快速查询
本文主要讲述如何通过使用TreeView控件来实现树结构的显示,以及树节点的快速查找功能.并针对通用树结构的数据结构存储进行一定的分析和设计.通过文本能够了解如何存储层次结构的数据库设计,如何快速使用 ...
- 基于apt实现的Android快速持久化框架:AptPreferences
AptPreferences是基于面向对象设计的快速持久化框架,目的是为了简化SharePreferences的使用,减少代码的编写.可以非常快速地保存基本类型和对象.AptPreferences是基 ...
- 快速查询Python脚本语法
/********************************************************************* * 快速查询Python脚本语法 * 说明: * Char ...
- 一种快速查询多点DS18B20温度的方法(转)
源:http://hi.baidu.com/james_xiao/item/79b961c90623093e45941623 一种快速查询多点DS18B20温度的方法 引言 为了满足实时性要 ...
- 快速查询List中指定的数据
时间:2017/5/15 作者:李国君 题目:快速查询List中指定的数据 背景:当List中保存了大量的数据时,用传统的方法去遍历指定的数据肯定会效率低下,有一个方法就是类似于数据库查询那样,根据索 ...
- Android 异步查询框架AsyncQueryHandler的使用
AsyncQueryHandler简介: 异步的查询操作帮助类,可以处理增删改(ContentProvider提供的数据) 使用场景: 在一般的应用中可以使用ContentProvider去操作数据库 ...
- .NET Core 开源工具 IPTools - 快速查询 IP 地理位置、经纬度信息
快速查询IP信息,支持国内和国外IP信息查询,支持查询经纬度,地理位置最高支持到城市. 1. IPTools.China 快速查询中国IP地址信息,包含国家.省份.城市.和网络运营商.非中国IP只支持 ...
- mysql常用快速查询修改操作
mysql常用快速查询修改操作 一.查找并修改非innodb引擎为innodb引擎 # 通用操作 mysql> select concat('alter table ',table_schema ...
- 用DOM解析XML ,用xpath快速查询XML节点
XPath是一种快速查询xml节点和属性的一种语言,Xpath和xml的关系就像是sql语句和数据库的关系.用sql语句可以从数据库中快速查询出东西同样的用xPath也可以快速的从xml中查询出东西. ...
随机推荐
- NYOJ 741 "数学家"ST
"数学家"ST 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描写叙述 ST是个非常特别的人类,不仅喜欢做一些不同平常的事,并且对于在无聊的时候怎样打发时 ...
- checkbox与说明文字无法对齐的问题
解决方法: vertical-align:middle; 例:<input type=checkbox id="theId" name=checkbox style=&quo ...
- popupwindow 与 输入法
有时候popupwindow会被输入法覆盖, 有时候popupwindow会被输入法给顶上去. 而且这个问题还跟theme的windowFullscreen属性相关. 不过这些可以都不用管, 根据项目 ...
- php中并发读写文件冲突的解决方案(文件锁应用示例)
PHP(外文名: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言.语法吸收了C语言.Java和Perl的特点,入门门槛较低,易于学习,使用广泛,主要适 ...
- saiku 分布式实践
saiku比较吃内存,一旦人多了,那么内存可能不够,所以会考虑主从结构,分担压力.为了保证数据的稳定性,也会有类似的考虑,那么问题来了,如何实现saiku的分布式搭建哪? 我阅读了一些国内的文章,没有 ...
- u3d 性能优化
http://blog.csdn.net/candycat1992/article/details/42127811 写在前面 这一篇是在Digital Tutors的一个系列教程的基础上总结扩展而得 ...
- Linux Ubuntu搭建git服务器
1. 安装 openssh-server ,用于创建SSH服务. sudo apt-get install openssl-server 使用命令ps -e|grep ssh,查看ssh服务是否启动. ...
- 解决eclipse中android添加重载函数时参数为arg0,arg1的问题
遇到同样的问题,发现有人已经解决了,大体意思就是为android sdk 添加 src,以下是文章链接 http://blog.csdn.net/u014084081/article/details/ ...
- [原]SQLite的学习系列之获取数据库版本
最先了解到SQLite是基于其作为移动客户端数据存储平台,以下是其官网(https://www.sqlite.org/)关于SQLite的一段介绍: SQLite是遵守ACID的轻型数据库引擎,它包含 ...
- Android 开发框架汇总
Android 开发框架汇总 时间过的真快,转眼间就要进入到16年的8月了,现在应该是三伏期间,一个字“热”.前端时间整理了一篇“JS前端框架汇总”,然后紧接着又抽时间学习了一下Android开发,在 ...