# SqlRepoEx **Repository Path**: skymysky/SqlRepoEx ## Basic Information - **Project Name**: SqlRepoEx - **Description**: .Net平台下兼容.NET Standard 2.0,一个实现以Lambda表达式转转换标准SQL语句,使用强类型操作数据的轻量级ORM工具,在减少魔法字串同时,通过灵活的Lambda表达式组合,实现业务数据查询的多样性。 - **Primary Language**: C# - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 5 - **Created**: 2018-10-04 - **Last Updated**: 2020-12-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 本项目是在 SqlRepo 之上进行的二次开发 ## 主要解决:
1、解决拼接语句,使用where以外方法时,缺少Where子句时的错误;
2、解决多条件拼接Where;
3、增加操作时,不再受限于实例必需有Id的自增自段
## Example ``` c# IRepository repository = repositoryFactory.Create(); 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); ``` 未改之前 ``` sql SELECT [dbo].[ToDo].[Id] , [dbo].[ToDo].[Task] , [dbo].[ToDo].[CreatedDate] FROM [dbo].[ToDo] WHERE ([dbo].[ToDo].[IsCompleted] = 0) WHERE ([dbo].[ToDo].[Id] = 3); ``` 更改后 ``` sql SELECT [dbo].[ToDo].[Id] , [dbo].[ToDo].[Task] , [dbo].[ToDo].[CreatedDate] FROM [dbo].[ToDo] WHERE ([dbo].[ToDo].[IsCompleted] = 0) And ([dbo].[ToDo].[Id] = 3); ``` 指定非自增字段 ``` C# var repository = this.repositoryFactory.Create(); 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 ``` SQL INSERT [dbo].[DoitTest]([TestId], [TestRmk], [TestBool]) VALUES(123, '测试', 1); ``` 指定非自增字段 ``` C# var repository = this.repositoryFactory.Create(); DoitTest doitTest = new DoitTest(); doitTest.TestRmk = "测试"; doitTest.TestBool = true; doitTest.TestId = 123; Console.WriteLine(repository.Insert().UsingIdField(d => d.TestId).For(doitTest).Sql()); ``` 生成的SQL ``` SQL INSERT [dbo].[DoitTest]([TestRmk], [TestBool]) VALUES('测试', 1); SELECT * FROM [dbo].[DoitTest] WHERE [TestId] = SCOPE_IDENTITY(); ``` 原项目中的例子: ```csharp public class GettingStarted { private IRepositoryFactory repositoryFactory; public GettingStarted(IRepositoryFactory repositoryFactory) { this.repositoryFactory = repositoryFactory; } public void DoIt() { var repository = this.repositoryFactory.Create(); 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. ```sql SELECT [dbo].[ToDo].[Id], [dbo].[ToDo].[Task], [dbo].[ToDo].[CreatedDate] FROM [dbo].[ToDo] WHERE [dbo].[ToDo].[IsCompleted] = 0; ``` 2018-9-25增加分页操作
```csharp var repository = RepoFactory.Create(); 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参数返回