文档目录索引

  1. 查询、函数、分组、排序、分页
  2. 添加 Insert into
  3. 编辑 Update set
  4. 删除 Delete
  5. 生成实体
  6. 内置常用工具类库  文档完善中...
  7. 事务处理
  8. Join 连接查询 1.0.2.X版本中添加 开发中...

开源地址:https://gitee.com/wangshuyu/LambdaToSql

简介:

LambdaToSql 简单的兰姆达转换sql,可以直接.ToList()执行,返回查询结果

第一个版本支持:

  1. Where 条件查询
  2. Order by 排序
  3. Group by 分组
  4. 简单分页,只支持row_number
  5. 支持数据库函数:Avg Max Min Sum Count
  6. 不需要任何第三方类库

使用前置条件:

  1. 主键必须是 Guid  uniqueidentifier  
  2. 表必须有 CreateTime datetime ,给分页排序使用,后期会把这个条件处理掉

第一个版不支持:

  1. 暂不支持事物处理
  2. 暂不支持多表join查询
  3. 只支持Microsoft SQL Server数据库,分页不支持SQL Server 2000

测试表Sql语句:

  1. CREATE TABLE [dbo].[System_UserInfo](
  2. [Guid] [uniqueidentifier] NOT NULL CONSTRAINT [DF_UserInfo_Guid] DEFAULT (newid()),
  3. [LoginName] [nvarchar](32) NULL,
  4. [UserName] [nvarchar](32) NULL,
  5. [PassWord] [nvarchar](64) NULL,
  6. [Cert] [uniqueidentifier] NULL,
  7. [IdCard] [nvarchar](64) NULL,
  8. [Birthday] [nvarchar](64) NULL,
  9. [Address] [nvarchar](1024) NULL,
  10. [ImgUrl] [nvarchar](128) NULL,
  11. [Gender] [nvarchar](2) NULL,
  12. [Mobile] [nvarchar](16) NULL,
  13. [Remark] [nvarchar](1024) NULL,
  14. [Unionid] [nvarchar](128) NULL,
  15. [CreateTime] [datetime] NULL CONSTRAINT [DF_UserInfo_CreaTime] DEFAULT (getdate()),
  16. [IsDelete] [int] NULL,
  17. [CreateUserInfoID] [uniqueidentifier] NULL,
  18. CONSTRAINT [PK_USER] PRIMARY KEY NONCLUSTERED
  19. (
  20. [Guid] ASC
  21. )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
  22. ) ON [PRIMARY]
  23.  
  24. GO
  25.  
  26. EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'用户ID' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'System_UserInfo', @level2type=N'COLUMN',@level2name=N'Guid'
  27. GO
  28.  
  29. EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'登录名称' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'System_UserInfo', @level2type=N'COLUMN',@level2name=N'LoginName'
  30. GO
  31.  
  32. EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'用户名' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'System_UserInfo', @level2type=N'COLUMN',@level2name=N'UserName'
  33. GO
  34.  
  35. EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'密码' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'System_UserInfo', @level2type=N'COLUMN',@level2name=N'PassWord'
  36. GO
  37.  
  38. EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'证件类型' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'System_UserInfo', @level2type=N'COLUMN',@level2name=N'Cert'
  39. GO
  40.  
  41. EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'身份证号' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'System_UserInfo', @level2type=N'COLUMN',@level2name=N'IdCard'
  42. GO
  43.  
  44. EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'出生日期' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'System_UserInfo', @level2type=N'COLUMN',@level2name=N'Birthday'
  45. GO
  46.  
  47. EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'地址' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'System_UserInfo', @level2type=N'COLUMN',@level2name=N'Address'
  48. GO
  49.  
  50. EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'头像' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'System_UserInfo', @level2type=N'COLUMN',@level2name=N'ImgUrl'
  51. GO
  52.  
  53. EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'性别' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'System_UserInfo', @level2type=N'COLUMN',@level2name=N'Gender'
  54. GO
  55.  
  56. EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'手机号' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'System_UserInfo', @level2type=N'COLUMN',@level2name=N'Mobile'
  57. GO
  58.  
  59. EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'备注' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'System_UserInfo', @level2type=N'COLUMN',@level2name=N'Remark'
  60. GO
  61.  
  62. EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'微信登录唯一码' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'System_UserInfo', @level2type=N'COLUMN',@level2name=N'Unionid'
  63. GO
  64.  
  65. EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'创建时间' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'System_UserInfo', @level2type=N'COLUMN',@level2name=N'CreateTime'
  66. GO
  67.  
  68. EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'是否删除' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'System_UserInfo', @level2type=N'COLUMN',@level2name=N'IsDelete'
  69. GO
  70.  
  71. EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'创建人ID' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'System_UserInfo', @level2type=N'COLUMN',@level2name=N'CreateUserInfoID'
  72. GO
  73.  
  74. EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'用户表' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'System_UserInfo'
  75. GO

测试实体:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Runtime.Serialization;
  5. using System.Text;
  6. using LambdaToSql;
  7. using LambdaToSql.FrameWork;
  8. using LambdaToSql.Extended;
  9.  
  10. namespace EntityModel
  11. {
  12.  
  13. /// <summary>
  14. /// 用户表
  15. /// </summary>
  16. [Serializable]
  17. [DataContract]
  18. public class System_UserInfo
  19. {
  20.  
  21. /// <summary>
  22. /// 用户ID
  23. /// </summary>
  24. [DataMember]
  25. public System.Guid Guid { get; set; }
  26.  
  27. /// <summary>
  28. /// 登录名称
  29. /// </summary>
  30. [DataMember]
  31. public string LoginName { get; set; }
  32.  
  33. /// <summary>
  34. /// 用户名
  35. /// </summary>
  36. [DataMember]
  37. public string UserName { get; set; }
  38.  
  39. /// <summary>
  40. /// 密码
  41. /// </summary>
  42. [DataMember]
  43. public string PassWord { get; set; }
  44.  
  45. /// <summary>
  46. /// 证件类型
  47. /// </summary>
  48. [DataMember]
  49. public Nullable<System.Guid> Cert { get; set; }
  50.  
  51. /// <summary>
  52. /// 身份证号
  53. /// </summary>
  54. [DataMember]
  55. public string IdCard { get; set; }
  56.  
  57. /// <summary>
  58. /// 出生日期
  59. /// </summary>
  60. [DataMember]
  61. public string Birthday { get; set; }
  62.  
  63. /// <summary>
  64. /// 地址
  65. /// </summary>
  66. [DataMember]
  67. public string Address { get; set; }
  68.  
  69. /// <summary>
  70. /// 头像
  71. /// </summary>
  72. [DataMember]
  73. public string ImgUrl { get; set; }
  74.  
  75. /// <summary>
  76. /// 性别
  77. /// </summary>
  78. [DataMember]
  79. public string Gender { get; set; }
  80.  
  81. /// <summary>
  82. /// 手机号
  83. /// </summary>
  84. [DataMember]
  85. public string Mobile { get; set; }
  86.  
  87. /// <summary>
  88. /// 备注
  89. /// </summary>
  90. [DataMember]
  91. public string Remark { get; set; }
  92.  
  93. /// <summary>
  94. /// 微信登录唯一码
  95. /// </summary>
  96. [DataMember]
  97. public string Unionid { get; set; }
  98.  
  99. /// <summary>
  100. /// 创建时间
  101. /// </summary>
  102. [DataMember]
  103. public Nullable<System.DateTime> CreateTime { get; set; }
  104.  
  105. /// <summary>
  106. /// 是否删除
  107. /// </summary>
  108. [DataMember]
  109. public Nullable<int> IsDelete { get; set; }
  110.  
  111. /// <summary>
  112. /// 创建人ID
  113. /// </summary>
  114. [DataMember]
  115. public Nullable<System.Guid> CreateUserInfoID { get; set; }
  116. }
  117. }

测试代码,具体查看后续文章:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.UI;
  6. using System.Web.UI.WebControls;
  7. using LambdaToSql.FrameWork;
  8.  
  9. namespace Web
  10. {
  11. public partial class Clent : System.Web.UI.Page
  12. {
  13. LambdaToSql.SqlClient DB = new LambdaToSql.SqlClient();
  14.  
  15. protected void Page_Load(object sender, EventArgs e)
  16. {
  17. //生成实体对象文件
  18. //LambdaToSql.SysConfig.Init();
  19. //LambdaToSql.Fireworks.CreateEntity.Init("d:/class/");
  20.  
  21. //Find查询主键
  22. //var obj = db.QueryTable<EntityModel.System_UserInfo>().Find(Guid.Parse("9c1d1247-cd2c-424d-be14-ef8abae655a4"));
  23.  
  24. //var item = new string[] { "15842709668", "18609877687", "15804279711", "13998756128", "13019965033" }.ToList();
  25. //var list = db.QueryTable<EntityModel.System_UserInfo>(ex => LambdaToSql.Fireworks.Method.In(ex.LoginName, item)).ToList();
  26. //var list = db.QueryTable<EntityModel.System_UserInfo>(ex => item.Contains(ex.LoginName)).ToList();
  27.  
  28. function();
  29. Select();
  30. }
  31.  
  32. private void function() //函数查询
  33. {
  34. var list = DB.QueryTable<EntityModel.System_UserInfo>()
  35. //.Where(ex => ex.LoginName.Contains("15"))
  36. //.Where(ex => ex.LoginName.StartsWith("158"))
  37. //.Where(ex => ex.LoginName.EndsWith("88"))
  38. //.Where(ex => ex.LoginName.NotContains("88"))
  39. //.Where(ex => ex.LoginName == "Shuyu".ToLower())
  40. // .Where(ex => item.Contains(ex.LoginName))
  41. //.Where(ex => item.NotContains(ex.LoginName))
  42. .ToList();
  43. }
  44.  
  45. private void Select()//基本查询 分页
  46. {
  47. int total = ;
  48. var list = DB.QueryTable<EntityModel.System_UserInfo>()
  49. //.Select(ex => new { ex.LoginName, ex.UserName })
  50. //.Select(ex => new { ex.PassWord, ex.IdCard })
  51. //.Where(ex => ex.LoginName == "test" || ex.UserName == "社区民警")
  52. //.Where(ex => ex.LoginName == "test")
  53. //.GroupBy(ex => new { ex.LoginName })
  54. //.GroupBy(ex => new { ex.UserName })
  55. //.OrderByDescending(ex => ex.LoginName)
  56. //.OrderBy(ex => ex.UserName)
  57. //.Take(15)
  58. //.Where(ex => ex.LoginName.Contains("15"))
  59. //.Where(ex => ex.LoginName.StartsWith("158"))
  60. //.Where(ex => ex.LoginName.EndsWith("88"))
  61. //.Where(ex => ex.LoginName.NotContains("88"))
  62. //.Where(ex => ex.LoginName == "Shuyu".ToLower())
  63.  
  64. //.Where(ex => Method.Like(ex.LoginName, "158%"))
  65. //.Where(ex => Method.NotLike(ex.LoginName, "158%"))
  66.  
  67. //.Where(ex => Method.In(ex.LoginName, "15841479211"))
  68. //.Where(ex => Method.In(ex.LoginName, item))
  69. //.Where(ex => Method.NotIn(ex.LoginName, item))
  70.  
  71. //.Count();
  72. //.Take(10)
  73. //.Skip(2)
  74. //.OrderBy(ex => ex.CreateTime)
  75. //.Sum(ex => ex.LogOnCount);
  76. //.Min(ex => ex.LogOnCount);
  77. //.Max(ex => ex.LogOnCount);
  78. //.Avg(ex => ex.LogOnCount);
  79. //.First();
  80. //.FirstOrDefault();
  81. //.ToPageList(3, 15, ref total);
  82. .ToList();
  83. }
  84. }
  85. }

Web.config配置文件

  1. <connectionStrings>
  2. <add name="ConnectionString" connectionString="Server=.;Database=Test;User ID=sa;Password=123456" providerName="System.Data.SqlClient" />
  3. </connectionStrings>

性能:

  1. 基本和Ado.Net原生接近,lambda解析转换成sql语句,然后使用DBHelper参数化查询的数据库,性能损耗是在兰姆达转语句上,后续版本会加缓存机制。
  2. 暂时不支持事物处理
  3. 接口 命名重新规划,但还是不太好,后续版本会慢慢规划,暂时预计大概发布 10个版本,出一个稳定版本
  4. 稳定后会开源出来 哈哈

如何获取:

  1. NuGet管理器 搜索:LambdaToSql
  2. Install-Package LambdaToSql -Version 版本号

使用示例:

  1. 配置文件中添加链接数据库字符串  <add name="ConnectionString" connectionString="Server=.;Database=test;User ID=sa;Password=123456" providerName="System.Data.SqlClient" />
  2. 使用实例

    DB.QueryTable<实体对象>()
    .Where(条件)
    .Select(字段)
    .GroupBy(分组)
    .OrderByDescending(排序)
    .OrderBy(排序)
    .Skip(页码)
    .Take(数量)
    .ToList();//返回集合

    .Count();
    .Sum(求和);
    .Min(最小值);
    .Max(最大值);
    .Avg(平均值);
    .First();//第一条
    .FirstOrDefault();//第一条
    .ToPageList(页码, 每页数量, ref 总数);//分页

  3. 其它

最后感谢:SqlSugar 作者 开源 

LambdaToSql 发布 兰姆达转换sql的更多相关文章

  1. C/C++ C++ 11 兰姆达

    { auto layer = Layer::create();    auto event = cocos2d::EventListenerTouchOneByOne::create();    ev ...

  2. c++ 兰姆达表达式

    #include<iostream> using namespace std;   int main() {     int a = 1;     int b = 2;       aut ...

  3. 如何转换SQL Server 2008数据库到SQL Server 2005

        背景介绍: 公司一套系统使用的是SQL SERVER 2008数据库,突然一天收到邮件,需要将这套系统部署到各个不同地方(海外)的工厂,需要在各个工厂部署该数据库,等我将准备工作做好,整理文档 ...

  4. lambda表达式转换sql

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; usin ...

  5. 数据库-转换sql语句

    文章描述:主要说明转换成SQL语句的过程.----必要信息(数据库名,表名,条件)转换成SQL语句 一些界面上数据增删改查的操作往往只需要输入一数据库名,表名,加条件就可以进行数据查询了,在这背后是怎 ...

  6. delphi 转换sql server 中的 bit类型

    FieldByName('e').AsBoolean = false 其中e为 sql server 中的bit类型.

  7. 最近整理的一些行列转换sql(有自己的,有别人的),留作记录

    --case when 经典用法SELECT * FROM        (SELECT 1 NUM,              '奖项金额',              SUM(CASE WHEN ...

  8. 数据库行列转换sql

    经常折腾数据库,常常遇到数据库行列转换的问题,下面就用一个小例子来演示下如何进行行列转换. 1.创建一张表 CREATE TABLE [android_source]( [CREATETIME] [d ...

  9. 转换sql文件的create table语句为drop table语句

    package com.csii.pweb.query.action; import java.io.BufferedReader; import java.io.FileNotFoundExcept ...

随机推荐

  1. java中遍历map的几种方法介绍

          喜欢用Java写程序的朋友都知道,我们常用的一种数据结构map中存储的是键值对,我们一般存储的方式是: map.put(key, value); 而提取相应键的值用的方法是: map.ge ...

  2. [Python]程序性能分析

    有些脚本发现比预期要慢的多,就需要找到瓶颈,然后做相应的优化,参考A guide to analyzing Python performance,也可以说是翻译. 指标 运行时间 时间瓶颈 内存使用 ...

  3. 【Unity Shader实战】卡通风格的Shader(一)

    写在前面 本系列其他文章: 卡通风格的Shader(二) 呜,其实很早就看到了这类Shader,实现方法很多,效果也有些许不一样.从这篇开始,陆续学习一下接触到的卡通类型Shader的编写. 本篇的最 ...

  4. android仿iphone的地区选择

    最近项目要做一个,类似淘宝手机客户端的,选择收货地址的三级联动滚动选择组件,下面是它的大致界面截图: 在IOS中有个叫UIPickerView的选择器,并且在dataSource中定义了UIPicke ...

  5. JSP自定义标签之简单标签入门

    在sun官方文档上有下面这样一段话. 官方文档声明 public interface SimpleTag extends JspTag Interface for defining Simple Ta ...

  6. [GitHub]第二讲:GitHub客户端

    文章转载自http://blog.csdn.net/loadsong/article/details/51591456 Git 是一个分布式的版本控制工具,即使我不联网,也可以在本地进行 git 的版 ...

  7. Mybatis执行BatchExecutor(四)

    BatchExecutor:顾名思义就是进行批量操作,通过批量操作来提高性能 public class BatchExecutor extends BaseExecutor { public stat ...

  8. Java JDBC封装模式

    模仿DBUtils里面的一些用法,下面是一些简单的实现数据集的操作的方法 下面使用到的两个bean.首先是userbean package bean; public class user { Stri ...

  9. TCP的ACK确认系列 — 延迟确认

    主要内容:TCP的延迟确认.延迟确认定时器的实现. 内核版本:3.15.2 我的博客:http://blog.csdn.net/zhangskd 延迟确认模式 发送方在发送数据包时,如果发送的数据包有 ...

  10. 跨平台移动APP开发进阶(三)hbuilder+mui mobile app 开发心酸路

    注:请点击此处进行充电! 1.问题描述:在实现图片轮转时,若将 <script type="text/javascript"> mui("#slider&qu ...