Lambda 转换 SQL ORM 工具 SqlRepoEx

简介: 主要解决: 1、解决拼接语句,使用where以外方法时,缺少Where子句时的错误; 2、解决多条件拼接Where; 3、增加操作时,不再受限于实例必需有Id的自增自段 Example IRepository repository = repositoryFactory.

主要解决:

1、解决拼接语句,使用where以外方法时,缺少Where子句时的错误;
2、解决多条件拼接Where;
3、增加操作时,不再受限于实例必需有Id的自增自段

Example

IRepository<ToDo> repository = repositoryFactory.Create<ToDo>();
            var results = repository.Query()
                         .Select(e => e.Id, e => e.Task, e => e.CreatedDate);
 results = results.Where(e => e.IsCompleted == false);
 results = results.Where(e => e.Id == 3);

未改之前

SELECT [dbo].[ToDo].[Id]
, [dbo].[ToDo].[Task]
, [dbo].[ToDo].[CreatedDate]
FROM [dbo].[ToDo]
WHERE ([dbo].[ToDo].[IsCompleted] = 0)
WHERE ([dbo].[ToDo].[Id] = 3);

更改后

SELECT [dbo].[ToDo].[Id]
, [dbo].[ToDo].[Task]
, [dbo].[ToDo].[CreatedDate]
FROM [dbo].[ToDo]
WHERE ([dbo].[ToDo].[IsCompleted] = 0)
And ([dbo].[ToDo].[Id] = 3);

指定非自增字段

var repository = this.repositoryFactory.Create<DoitTest>();
DoitTest doitTest = new DoitTest();

doitTest.TestRmk = "测试";
doitTest.TestBool = true;
doitTest.TestId = 123;
Console.WriteLine(repository.Insert().UsingIdField(d => d.TestId, false).For(doitTest).Sql());

生成的SQL

INSERT [dbo].[DoitTest]([TestId], [TestRmk], [TestBool])
VALUES(123, '测试', 1);

指定非自增字段

var repository = this.repositoryFactory.Create<DoitTest>();
DoitTest doitTest = new DoitTest();

doitTest.TestRmk = "测试";
doitTest.TestBool = true;
doitTest.TestId = 123;
Console.WriteLine(repository.Insert().UsingIdField(d => d.TestId).For(doitTest).Sql());

生成的SQL

INSERT [dbo].[DoitTest]([TestRmk], [TestBool])
VALUES('测试', 1);
SELECT *
FROM [dbo].[DoitTest]
WHERE [TestId] = SCOPE_IDENTITY();

原项目中的例子:

public class GettingStarted
{
    private IRepositoryFactory repositoryFactory;

    public GettingStarted(IRepositoryFactory repositoryFactory)
    {
        this.repositoryFactory = repositoryFactory;
    }

    public void DoIt()
    {
         var repository = this.repositoryFactory.Create<ToDo>();
         var results = repository.Query()
         .Select(e => e.Id, e => e.Task, e => e.CreatedDate)
         .Where(e => e.IsCompleted == false)
         .Go();
    }
}

Generates the following SQL statement and maps the results back to the list of ToDo objects.

SELECT [dbo].[ToDo].[Id], [dbo].[ToDo].[Task], [dbo].[ToDo].[CreatedDate]
FROM [dbo].[ToDo]
WHERE [dbo].[ToDo].[IsCompleted] = 0;

2018-9-25增加分页操作

var repository = RepoFactory.Create<ToDo>();
            var results = repository.Query()
                                    .Select(e => e.Id, e => e.Task, e => e.CreatedDate)
                                    .OrderBy(e => e.Id)
                                    .Page(10, 3)
                                    .Go();

2018-9-25增加存储OUTPUT参数返回

本文来自云栖社区合作伙伴“开源中国”

本文作者:h4cd

原文链接

相关文章
|
4天前
|
SQL 测试技术 网络安全
Python之SQLMap:自动SQL注入和渗透测试工具示例详解
Python之SQLMap:自动SQL注入和渗透测试工具示例详解
13 0
|
1月前
|
SQL 运维 数据管理
sql管理工具archery简介
Archery是一个多公司采用的SQL管理工具,提供权限管理、工作流配置、实例管理、SQL审核、查询、优化及通知功能。它支持多级审批和不同云环境的数据管理。尝试Archery的SaaS版本可访问[ArcheryDMS.com](https://archerydms.com/home/)。此外,NineData是一个综合平台,包含SQL开发、数据复制等功能,适应混合云和多云环境,由叶正盛创建,详情见[Ninedata.cloud](https://www.ninedata.cloud/aboutus)。
66 0
|
3月前
|
SQL 关系型数据库 MySQL
Navicat、HeidiSQL和SQL Workbench:数据库管理工具的三足鼎立
随着数据管理需求的日益增长,数据库管理工具的选择成为了企业和开发者需要深思熟虑的重要问题。在这个竞争激烈的市场中,Navicat、HeidiSQL和SQL Workbench三款备受关注的数据库管理工具各具特色,形成了一种三足鼎立的局面。
65 0
|
3月前
|
SQL JSON 数据库
在线JSON转SQL工具
JSON文件中的数据或者JSON对象转换为SQL插入语句,方便用户将数据导入到数据库中。
241 2
|
3月前
|
SQL 算法 Oracle
在线sql格式化工具
让SQL代码整洁如新,在线SQL格式化工具助力高效编程
89 1
|
4月前
|
SQL 缓存 Java
JAVAEE框架技术之8-myBatis ORM框架技术参数和动态SQL语句
JAVAEE框架技术之8-myBatis ORM框架技术参数和动态SQL语句
65 0
JAVAEE框架技术之8-myBatis ORM框架技术参数和动态SQL语句
|
9月前
|
SQL 设计模式 Java
用建造者模式实现一个防SQL注入的ORM框架
以构建一门课程为例,一个完整的课程由PPT课件、回放视频、课堂笔记、课后作业组成,但是这些内容的设置顺序可以随意调整,我们用建造者模式来代入理解一下。首先创建一个产品类Course。
43 0
|
9月前
|
SQL 前端开发
前端项目实战伍拾贰​react-admin+material ui-踩坑-能用工具创建表别用sql
前端项目实战伍拾贰​react-admin+material ui-踩坑-能用工具创建表别用sql
41 0
|
9月前
|
SQL 数据库 数据库管理
SQLAlchemy 入门:Python 中的 SQL 工具包和 ORM
SQLAlchemy 是 Python 中一款非常流行的数据库工具包,它对底层的数据库操作提供了高层次的抽象。在本篇文章中,我们将介绍 SQLAlchemy 的两个主要组成部分:SQL 工具包 (SQL Toolkit) 和对象关系映射器 (Object-Relational Mapper, ORM) 的基本使用。
|
9月前
|
SQL API 数据库
[Python] Django ORM与执行原生SQL实现操作数据库(下)
[Python] Django ORM与执行原生SQL实现操作数据库(下)