文档目录索引

  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语句:

CREATE TABLE [dbo].[System_UserInfo](
[Guid] [uniqueidentifier] NOT NULL CONSTRAINT [DF_UserInfo_Guid] DEFAULT (newid()),
[LoginName] [nvarchar](32) NULL,
[UserName] [nvarchar](32) NULL,
[PassWord] [nvarchar](64) NULL,
[Cert] [uniqueidentifier] NULL,
[IdCard] [nvarchar](64) NULL,
[Birthday] [nvarchar](64) NULL,
[Address] [nvarchar](1024) NULL,
[ImgUrl] [nvarchar](128) NULL,
[Gender] [nvarchar](2) NULL,
[Mobile] [nvarchar](16) NULL,
[Remark] [nvarchar](1024) NULL,
[Unionid] [nvarchar](128) NULL,
[CreateTime] [datetime] NULL CONSTRAINT [DF_UserInfo_CreaTime] DEFAULT (getdate()),
[IsDelete] [int] NULL,
[CreateUserInfoID] [uniqueidentifier] NULL,
CONSTRAINT [PK_USER] PRIMARY KEY NONCLUSTERED
(
[Guid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] GO 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'
GO 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'
GO 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'
GO 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'
GO 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'
GO 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'
GO 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'
GO 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'
GO 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'
GO 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'
GO 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'
GO 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'
GO 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'
GO 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'
GO 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'
GO 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'
GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'用户表' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'System_UserInfo'
GO

测试实体:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using LambdaToSql;
using LambdaToSql.FrameWork;
using LambdaToSql.Extended; namespace EntityModel
{ /// <summary>
/// 用户表
/// </summary>
[Serializable]
[DataContract]
public class System_UserInfo
{ /// <summary>
/// 用户ID
/// </summary>
[DataMember]
public System.Guid Guid { get; set; } /// <summary>
/// 登录名称
/// </summary>
[DataMember]
public string LoginName { get; set; } /// <summary>
/// 用户名
/// </summary>
[DataMember]
public string UserName { get; set; } /// <summary>
/// 密码
/// </summary>
[DataMember]
public string PassWord { get; set; } /// <summary>
/// 证件类型
/// </summary>
[DataMember]
public Nullable<System.Guid> Cert { get; set; } /// <summary>
/// 身份证号
/// </summary>
[DataMember]
public string IdCard { get; set; } /// <summary>
/// 出生日期
/// </summary>
[DataMember]
public string Birthday { get; set; } /// <summary>
/// 地址
/// </summary>
[DataMember]
public string Address { get; set; } /// <summary>
/// 头像
/// </summary>
[DataMember]
public string ImgUrl { get; set; } /// <summary>
/// 性别
/// </summary>
[DataMember]
public string Gender { get; set; } /// <summary>
/// 手机号
/// </summary>
[DataMember]
public string Mobile { get; set; } /// <summary>
/// 备注
/// </summary>
[DataMember]
public string Remark { get; set; } /// <summary>
/// 微信登录唯一码
/// </summary>
[DataMember]
public string Unionid { get; set; } /// <summary>
/// 创建时间
/// </summary>
[DataMember]
public Nullable<System.DateTime> CreateTime { get; set; } /// <summary>
/// 是否删除
/// </summary>
[DataMember]
public Nullable<int> IsDelete { get; set; } /// <summary>
/// 创建人ID
/// </summary>
[DataMember]
public Nullable<System.Guid> CreateUserInfoID { get; set; }
}
}

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using LambdaToSql.FrameWork; namespace Web
{
public partial class Clent : System.Web.UI.Page
{
LambdaToSql.SqlClient DB = new LambdaToSql.SqlClient(); protected void Page_Load(object sender, EventArgs e)
{
//生成实体对象文件
//LambdaToSql.SysConfig.Init();
//LambdaToSql.Fireworks.CreateEntity.Init("d:/class/"); //Find查询主键
//var obj = db.QueryTable<EntityModel.System_UserInfo>().Find(Guid.Parse("9c1d1247-cd2c-424d-be14-ef8abae655a4")); //var item = new string[] { "15842709668", "18609877687", "15804279711", "13998756128", "13019965033" }.ToList();
//var list = db.QueryTable<EntityModel.System_UserInfo>(ex => LambdaToSql.Fireworks.Method.In(ex.LoginName, item)).ToList();
//var list = db.QueryTable<EntityModel.System_UserInfo>(ex => item.Contains(ex.LoginName)).ToList(); function();
Select();
} private void function() //函数查询
{
var list = DB.QueryTable<EntityModel.System_UserInfo>()
//.Where(ex => ex.LoginName.Contains("15"))
//.Where(ex => ex.LoginName.StartsWith("158"))
//.Where(ex => ex.LoginName.EndsWith("88"))
//.Where(ex => ex.LoginName.NotContains("88"))
//.Where(ex => ex.LoginName == "Shuyu".ToLower())
// .Where(ex => item.Contains(ex.LoginName))
//.Where(ex => item.NotContains(ex.LoginName))
.ToList();
} private void Select()//基本查询 分页
{
int total = ;
var list = DB.QueryTable<EntityModel.System_UserInfo>()
//.Select(ex => new { ex.LoginName, ex.UserName })
//.Select(ex => new { ex.PassWord, ex.IdCard })
//.Where(ex => ex.LoginName == "test" || ex.UserName == "社区民警")
//.Where(ex => ex.LoginName == "test")
//.GroupBy(ex => new { ex.LoginName })
//.GroupBy(ex => new { ex.UserName })
//.OrderByDescending(ex => ex.LoginName)
//.OrderBy(ex => ex.UserName)
//.Take(15)
//.Where(ex => ex.LoginName.Contains("15"))
//.Where(ex => ex.LoginName.StartsWith("158"))
//.Where(ex => ex.LoginName.EndsWith("88"))
//.Where(ex => ex.LoginName.NotContains("88"))
//.Where(ex => ex.LoginName == "Shuyu".ToLower()) //.Where(ex => Method.Like(ex.LoginName, "158%"))
//.Where(ex => Method.NotLike(ex.LoginName, "158%")) //.Where(ex => Method.In(ex.LoginName, "15841479211"))
//.Where(ex => Method.In(ex.LoginName, item))
//.Where(ex => Method.NotIn(ex.LoginName, item)) //.Count();
//.Take(10)
//.Skip(2)
//.OrderBy(ex => ex.CreateTime)
//.Sum(ex => ex.LogOnCount);
//.Min(ex => ex.LogOnCount);
//.Max(ex => ex.LogOnCount);
//.Avg(ex => ex.LogOnCount);
//.First();
//.FirstOrDefault();
//.ToPageList(3, 15, ref total);
.ToList();
}
}
}

Web.config配置文件

<connectionStrings>
<add name="ConnectionString" connectionString="Server=.;Database=Test;User ID=sa;Password=123456" providerName="System.Data.SqlClient" />
</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. Socket层实现系列 — send()类发送函数的实现

    主要内容:socket发送函数的系统调用.Socket层实现. 内核版本:3.15.2 我的博客:http://blog.csdn.net/zhangskd 发送流程图 以下是send().sendt ...

  2. Qzone React Native改造

    Android Qzone 6.1版本在情侣空间涉水React Native,以动态插件方式将情侣空间进行React Natived的改造.在情侣空间基础上,Android Qzone 6.2版本以融 ...

  3. UNIX网络编程——TCP—经受时延与nagle算法、滑动窗口、拥塞窗口

    1.经受时延: TCP在接收到数据时并不立即发送ACK,相反,它推迟发送,以便将ACK与需要沿该方向发送的数据一起发送,时延为200ms,超过时延范围,发送确认. 2.nagle算法: 一个TCP连接 ...

  4. 使用TT模板+mvc+wcf实现简单查询

    今天是除夕,小编的这篇博客是掐着点儿发的,在此,祝各位小伙伴新年快乐,身体健康,万事如意:喜从天降,欣喜若狂:喜气盈门,好事成双:好人好运,金玉满堂:神采飞扬,如愿以偿,财源滚滚来,福如东海长:伴随着 ...

  5. Android面试题总结

    1.Android dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念 DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟 ...

  6. 【Vbox】centos虚拟机安装usb网卡驱动

    前面安装增强pack之后 usb设备是可以识别了,但是无法正常使用,应该是无线网卡驱动没有的原因. 查看usb设备 os:centos6.6 内核:2.6.32-504.el6.x86_64 [roo ...

  7. Java-IO之总框架

    在Java IO中我们会经常提到输入流和输出流,流是一种抽象的数据总称,本质是能够进行数据的传输.按照流的方向分为:输入流和输出流.按照流中处理数据的单位,可以将其区分为:字节流和字符流.在Java中 ...

  8. java造成内存泄露原因

    一.Java内存回收机制  不论哪种语言的内存分配方式,都需要返回所分配内存的真实地址,也就是返回一个指针到内存块的首地址.Java中对象是采用new或者反射的方法创建的,这些对象的创建都是在堆(He ...

  9. 多层界面之间显示与隐藏tabBar

    IOS中多层界面之间显示与隐藏tabBar? 在做项目的时候,遇到了一个难题,使用hidesBottomWhenPushed=YES属性设置,可以让本级界面及其以后界面都隐藏,但是根据项目 需求,在第 ...

  10. C语言通讯录管理系统

    本文转载自:http://blog.csdn.net/hackbuteer1/article/details/6573488 实现了通讯录的录入信息.保存信息.插入.删除.排序.查找.单个显示等功能. ...