mysql linq 查询超时_[LINQ2Dapper]最完整Dapper To Linq框架(一)---基础查询

此框架是Dapper的扩展,效率优于EntityFramwork,并且支持.NetFramework和.NetCore框架

支持.net framework4.5.1,.net core2.0及以上,更低版本适配如.netFramework4.0及以下请加群下载

支持Mssql,Oracle,Mysql等数据库

应用层需要引用包Kogel.Dapper.Extension.MsSql(如果数据库是Oracle则引用Kogel.Dapper.Extension.Oracle),Nuget上可以下载安装。

或者使用Nuget命令添加包

Install-Package Kogel.Dapper.Extension.MsSql

(一)Model实体类

实体类层需要安装Kogel.Dapper.Extension表名字段特性。[更多特性详情请点击]

usingKogel.Dapper.Extension.Attributes;public classusers

{///

///用户id(特性Identity标识该字段为主键)///

[Identity]public int id { get; set; }///

///code///

public string code { get; set; }///

///用户名称///

public string name { get; set; }///

///创建方式(1自定义角色 2通用角色)///

public int createWay { get; set; }///

///创建时间///

public DateTime createDate { get; set; }///

///创建人///

public string createUsers { get; set; }///

///角色id///

public int roleId { get; set; }

}

(二)使用实例

首先添加命名空间

using Kogel.Dapper.Extension.MsSql;

可以通过数据库连接对象点出扩展方法,例如

var conn = new SqlConnection("数据库连接字符串");

使用完记得释放连接对象,可以通过using或者 conn.Dispose();

查询

var users = conn.QuerySet().Where(x => x.code != "1").Get();

模糊查询

var users1 = conn.QuerySet().Where(x => x.name.Contains("Y")).Get();

查询一个数组条件

int[] array = new int[] { 1, 2, 3 };

//使用In

var comment = conn.QuerySet().Where(x => x.Id.In(array)).ToList();

//或者使用Contains

var comment = conn.QuerySet().Where(x => array.Contains(x.Id)).ToList();

使用sql查询

DynamicParameters param = new DynamicParameters();

param.Add("Id", 1);

var comment = conn.QuerySet().Where("Id=@Id", param)

.ToList();

范围查找

var comment = conn.QuerySet().Where(x => x.Id.Between(1, 10)).ToList();

修改

var users=new users();

users.name = Guid.NewGuid().ToString();

users.createDate = DateTime.Now;

int result = conn.CommandSet().Where(x => x.id == 4).Update(users);

自定义修改(修改指定字段)

int result = conn.CommandSet()

.Where(x => x.Content == "test")

.Update(x => new Comment

{

Content = "test1"

});

新增

int result = conn.CommandSet()

.Insert(new users() {

code = Guid.NewGuid().ToString(),

name = "test", createWay = 1,

createDate = DateTime.Now,

roleId = 2

});

新增返回自增Id

int result = conn.CommandSet()

.InsertIdentity(new users() {

code = Guid.NewGuid().ToString(),

name = "test", createWay = 1,

createDate = DateTime.Now,

roleId = 2

});

删除

int result = conn.CommandSet()

.Where(x => x.roleId == 2 && x.name == users2.name)

.Delete();

如果想使用事务

using (var conn = new SqlConnection(mysqlConnection))

{

//必须先打开数据库

conn.Open();

//创建事务对象

var transaction = conn.BeginTransaction();

//使用事务对象做修改

var result = conn.CommandSet(transaction)

.Where(x => x.Id.Equals(1))

.Update(x => new Comment()

{

Content = "test"

});

//提交事务,回滚使用 transaction.Rollback();

transaction.Commit();

}

连表查询

Join(主表关联字段,副表关联字段)

var list = conn.QuerySet()

.Where(x => x.code != "1")

.Join(x => x.roleId, y => y.id)

.ToList();

任意条件连表

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

var list = conn.QuerySet()

.Where(x => x.code != "1")

.Join((x,y)=>x.roleId==y.id)

.ToList();

还可以设置连表的方式(默认是Left Join)

var list = conn.QuerySet()

.Where(x => x.code != "1")

.Join((x,y)=>x.roleId==y.id, JoinMode.LEFT)

.ToList();

连表查询可以渲染成指定实体类,例如动态类型(dynamic)

var list = conn.QuerySet()

.Where(x => x.code != "1")

.Join(x => x.roleId, y => y.id)

.ToList();

翻页查询

//翻页查询第一页,10条数据

var list = conn.QuerySet()

.OrderBy(x => x.createDate)

.PageList(1, 10);

//翻页连表查询返回dynamic

var list1 = conn.QuerySet()

.Join(x => x.roleId, y => y.id)

.OrderBy(x => x.createDate)

.PageList(1, 10);

多表任意联查

var users = conn.QuerySet()

.Join((a, b) => a.roleId == b.id)

.Where((a, b) => a.id == 3 && b.id == 3)

.Get();

3.14版本后Where函数和匿名返回类型支持比较复杂的函数判断

例如

var comment1 = conn.QuerySet()

.Join((a, b) => a.ArticleId == b.Id)

.Where(x => x.Id.Between(80, 100)

&& x.SubTime.AddDays(-10) < DateTime.Now && x.Id > 10

&& x.Id > new QuerySet(conn, new MySqlProvider()).Where(y => y.Id < 3 && x.Id(y => y.Id)

)

.From()

.OrderBy(x => x.Id)

.PageList(1, 1, (a, b) => new

{

test = new List() { 3, 3, 1 }.FirstOrDefault(y => y == 1),

aaa = "6666" + "777",

Content = a.Content + "'test'" + b.Headlines + a.IdentityId,

bbb = new QuerySet(conn, new MySqlProvider())

.Where(y => y.ArticleId == b.Id && y.Content.Contains("test")).Sum(x => x.Id),

ccc = a.IdentityId,

ddd = Convert.ToInt32("(select count(1) from Comment)"),

a.Id

});

需要读取数据库的支持Sum和Count函数

不需要读取数据库的函数都支持,例如

test = new List() { 3, 3, 1 }.FirstOrDefault(y => y == 1)

批量新增

int result = conn.CommandSet().Insert(commentList);

以上操作都支持异步

3.1.8版本支持自定义导航查询

var ContentList = conn.QuerySet()

.ToList(x => new CommentDto()

{

Id = x.Id,

ArticleIds = x.ArticleId,

count = new QuerySet(conn, new MySqlProvider()).Where(y => y.Id == x.ArticleId).Count(),

NewsList = new QuerySet(conn, new MySqlProvider()).Where(y => y.Id == x.ArticleId).ToList(y => new NewsDto()

{

Id = y.Id,

Contents = y.Content

}).ToList()

});

(子属性返回暂时不支持匿名类)

(Dto类需要继承 IBaseEntity)

(三)扩展的一些函数处理

Kogel.Dapper支持一些基础的sql函数

43316ea8a74da886a96f8eb75606406f.png

以及时间函数在不同数据库中的处理

a119bf7258f7189ece7ad1007f0ea4da.png

还有字符的转换处理

5e832c1fd0f21bd269bb67b4026daf0f.png

(四)分组聚合

3.1.9.3版本后支持分组聚合查询

var commne = conn.QuerySet()

.Where(x=> x.Id > 0 && array1.Contains(x.Id) && x.Content.Replace("1", "2") ==x.Content)

.Where(x=>x.Id.In(array1))

.GroupBy(x=> new{ x.ArticleId })

.Having(x=> Function.Sum(x.Id) >= 5)

.ToList(x=> new{

x.ArticleId,

test1=Function.Sum(x.Id)

});

通过Function类点出函数,例如Function.Sum(字段)

75d10e670fab722d23ce40e3847b7da3.png

更多扩展敬请期待

Kogel.Dapper还支持linq和sql同时使用

已完成更加复杂查询条件或者连表关系,[详情请点击此处]。

框架开源,完整框架源码可以去Github上下载:

如有问题也可以加QQ群讨论:

技术群 710217654

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值