期货大赛项目|二,DAL详解
接口层就不重点讲述了,直接DAL层
DAL层
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using FuturesContest.IDAL;
using SqlSugar; namespace FuturesContest.DAL
{
public class BaseDal<T>: IBaseDal<T> where T:class,new()
{
public int Add(T entity)
{
using (var db = SqlSugarFatory.GetInstance())
{
var result = db.Insertable(entity).ExecuteCommand();
return result;
}
} public int AddReutrnIdentity(T entity)
{
using (var db = SqlSugarFatory.GetInstance())
{
var result = db.Insertable(entity).ExecuteReturnIdentity();
return result;
}
} public T AddReturnEntity(T entity)
{
using (var db = SqlSugarFatory.GetInstance())
{
var result = db.Insertable(entity).ExecuteReturnEntity();
return result;
}
} public bool AddReturnBool(T entity)
{
using (var db = SqlSugarFatory.GetInstance())
{
var result = db.Insertable(entity).ExecuteCommandIdentityIntoEntity();
return result;
}
} public int AddBatch(IEnumerable<T> list)
{
using (var db = SqlSugarFatory.GetInstance())
{
var result = db.Insertable(list.ToArray()).ExecuteCommand();
return result;
}
} public int Delete(T entity)
{
using (var db = SqlSugarFatory.GetInstance())
{
var result = db.Deleteable(entity).ExecuteCommand();
return result;
}
} public int Delete(IEnumerable<T> list)
{
using (var db = SqlSugarFatory.GetInstance())
{
var result = db.Deleteable<T>(list).ExecuteCommand();
return result;
}
} public int Delete(int id)
{
using (var db = SqlSugarFatory.GetInstance())
{
var result = db.Deleteable<T>(id).ExecuteCommand();
return result;
} } public int Delete(int[] ids)
{
using (var db = SqlSugarFatory.GetInstance())
{
var result = db.Deleteable<T>(ids).ExecuteCommand();
return result;
}
} public int Delete(IEnumerable<int> ids)
{
using (var db = SqlSugarFatory.GetInstance())
{
var result = db.Deleteable<T>(ids).ExecuteCommand();
return result;
}
} public int Modify(T entity)
{
using (var db = SqlSugarFatory.GetInstance())
{
var result = db.Updateable(entity).ExecuteCommand();
return result;
}
} public int ModifyBatch(List<T> list)
{
using (var db = SqlSugarFatory.GetInstance())
{
var result = db.Updateable(list).ExecuteCommand();
return result;
}
} public IEnumerable<T> QueryAll()
{
using (var db = SqlSugarFatory.GetInstance())
{
var result = db.Queryable<T>().ToList();
return result;
}
} public IEnumerable<T> QueryTop(int top)
{
using (var db = SqlSugarFatory.GetInstance())
{
var result = db.Queryable<T>().Take(top).ToList();
return result;
}
} public T QueryById(int id)
{
using (var db = SqlSugarFatory.GetInstance())
{
var result = db.Queryable<T>().InSingle(id);
return result;
}
} public IEnumerable<T> QueryPage(Expression<Func<T, object>> orderBy, int orderType, int pageIndex, int pageSize, ref int totalCount)
{
using (var db = SqlSugarFatory.GetInstance())
{
var result = db.Queryable<T>().OrderBy(orderBy, (OrderByType)orderType).ToPageList(pageIndex, pageSize, ref totalCount);
return result;
}
} public IEnumerable<T> QueryByIf(Expression<Func<T, bool>> where)
{
using (var db = SqlSugarFatory.GetInstance())
{
if (where != null)
{
var list = db.Queryable<T>().WhereIF(true, where).ToList();
return list;
}
else
{
var list = db.Queryable<T>().ToList();
return list;
}
} } public IEnumerable<T> QueryByIfPage(Expression<Func<T, object>> orderBy, int orderType, Expression<Func<T, bool>> where, int pageIndex, int pageSize, ref int totalCount)
{
using (var db = SqlSugarFatory.GetInstance())
{
var list = db.Queryable<T>().WhereIF(true, where).OrderBy(orderBy, (OrderByType)orderType).ToPageList(pageIndex, pageSize, ref totalCount);
return list;
}
}
}
}
public class BaseDal<T>: IBaseDal<T> where T:class,new()
T为泛型类型,可以用任意类型代替
where为泛型约束
class约束了T必须是一个类
new()约束了T必须有一个无参的构造函数
类中封装了很多的公用方法,这些方法在每一个实体类中都适用.
public IEnumerable<T> QueryByIf(Expression<Func<T, bool>> where)
{
using (var db = SqlSugarFatory.GetInstance())
{
if (where != null)
{
var list = db.Queryable<T>().WhereIF(true, where).ToList();
return list;
}
else
{
var list = db.Queryable<T>().ToList();
return list;
}
}
}
这是个多条件查询的方法,如果按照以前的思路,我们肯定要传入所有可能为筛选条件的参数,然后用if判断是否等于空,并用where1=1的拼接sql语句方法拼写,太繁琐
而SqlSugar支持lamada查询,所以我直接传入一个Expression<Func<T, bool>> where类型的参数,这就是lamada表达式参数类型的写法
调用的时候就可以这样写dal.QueryByIf(m=>m.name=="test"&&m.password=="test")
public IEnumerable<T> QueryPage(Expression<Func<T, object>> orderBy, int orderType, int pageIndex, int pageSize, ref int totalCount)
{
using (var db = SqlSugarFatory.GetInstance())
{
var result = db.Queryable<T>().OrderBy(orderBy, (OrderByType)orderType).ToPageList(pageIndex, pageSize, ref totalCount);
return result;
}
}
这是一个分页查询
SqlSugar为我们封装好了分页查询的方法ToPageList(),也为我们封装好了排序的OrderBy()
注意,OrderBy一定要在ToPageList之前
OrderBy接收一个lamada的排序字段和枚举的排序类型
这里介绍一个小知识,枚举和int是可以互相转换的,枚举顺序默认从0开始,0就代表枚举中的第一个值,1代表第二个值
所以我们传入了一个int类型的orderType参数
public IEnumerable<T> QueryByIfPage(Expression<Func<T, object>> orderBy, int orderType, Expression<Func<T, bool>> where, int pageIndex, int pageSize, ref int totalCount)
{
using (var db = SqlSugarFatory.GetInstance())
{
var list = db.Queryable<T>().WhereIF(true, where).OrderBy(orderBy, (OrderByType)orderType).ToPageList(pageIndex, pageSize, ref totalCount);
return list;
}
}
当分页需要筛选的时候,我们在添加一个lamada的where条件,在orderBy之前进行筛选
期货大赛项目|二,DAL详解的更多相关文章
- 详解C#泛型(二) 获取C#中方法的执行时间及其代码注入 详解C#泛型(一) 详解C#委托和事件(二) 详解C#特性和反射(四) 记一次.net core调用SOAP接口遇到的问题 C# WebRequest.Create 锚点“#”字符问题 根据内容来产生一个二维码
详解C#泛型(二) 一.自定义泛型方法(Generic Method),将类型参数用作参数列表或返回值的类型: void MyFunc<T>() //声明具有一个类型参数的泛型方法 { ...
- ViewPager 详解(二)---详解四大函数
前言:上篇中我们讲解了如何快速实现了一个滑动页面,但问题在于,PageAdapter必须要重写的四个函数,它们都各有什么意义,在上节的函数内部为什么要这么实现,下面我们就结合Android的API说明 ...
- iOS 开发之照片框架详解之二 —— PhotoKit 详解(下)
本文链接:http://kayosite.com/ios-development-and-detail-of-photo-framework-part-three.html 这里接着前文<iOS ...
- iOS 开发之照片框架详解之二 —— PhotoKit 详解(上)
转载自:http://kayosite.com/ios-development-and-detail-of-photo-framework-part-two.html 一. 概况 本文接着 iOS 开 ...
- TortoiseGit学习系列之TortoiseGit基本操作拉取项目(图文详解)
前面博客 TortoiseGit学习系列之TortoiseGit基本操作克隆项目(图文详解) TortoiseGit学习系列之TortoiseGit基本操作修改提交项目(图文详解) TortoiseG ...
- TortoiseGit学习系列之TortoiseGit基本操作修改提交项目(图文详解)
前面博客 TortoiseGit学习系列之TortoiseGit基本操作克隆项目(图文详解) TortoiseGit基本操作修改提交项目 项目克隆完成后(可以将克隆 clone 理解为 下载,检出 c ...
- Git学习系列之Git基本操作拉取项目(图文详解)
前面博客 Git学习系列之Git基本操作推送项目(图文详解) 当然,如果多人协作,或者多个客户端进行修改,那么我们还要拉取(Pull ... )别人推送到在线仓库的内容下来. 大神们是不推荐使用 pu ...
- Git学习系列之Git基本操作推送项目(图文详解)
前面博客 Git学习系列之Git基本操作提交项目(图文详解) 如果完成到一定程度,那么可以推送到远端在线仓库. 推送之前,请确保你已经设置了全局的 user.name 和 user.email, 如果 ...
- Git学习系列之Git基本操作提交项目(图文详解)
前面博客 Git学习系列之Git基本操作克隆项目(图文详解) 然后可以 cd 切换到 LispGentleIntro 目录, 新增或者修改某些文件.这里只是模拟一下操作, 实际情况可能是 使用 Ecl ...
随机推荐
- telnetlib 中各种 read 函数的意义
基本原理 要明白 telnetlib 中各个 read 函数的意义,首先要了解 telnetlib 的工作原理. telnetlib 首先通过 socket 连接从网络接收数据,把数据存储到自己的 r ...
- Vue 指令篇 案例(输入提交显示 提交数据_列表)
一.文本操作指令 //1.v-text <p v-text="msg"></p> 等价于 <p>{{msg}}</p> //2.v- ...
- 前端 -----js 定时器
定时器 在js中的定时器分两种:1.setTimeout() 2.setInterval() 1.setTimeOut() 只在指定时间后执行一次 /定时器 异步运行 function hello ...
- <转载>ford-fulkerson算法2
原文链接https://www.cnblogs.com/luweiseu/archive/2012/07/14/2591573.html 作者:wlu 7. 网络流算法--Ford-Fulkerson ...
- html5中如何去掉input type date默认
html5中如何去掉input type date默认样式 2.对日期时间控件的样式进行修改目前WebKit下有如下9个伪元素可以改变日期控件的UI:::-webkit-datetime-edit – ...
- 手机CPU架构体系分类及各大厂商
手机cpu相关知识,这对于开发Android应用程序适应各个机型有一定的辅助作用 . 手机cpu架构体系分类 指令集可分为复杂指令集(CISC)和精简指令集(RISC)两部分,代表架构分别是x86.A ...
- VMware虚拟机安装Linux系统centos7(一)
1.安装虚拟机(自行百度) 2.编辑虚拟机设置 光驱设置,镜像选择:(也可设置2核2G,基于自己计算机选择!) 3.点击开启此虚拟机(上下键选择安装,回车) 4.选择语言 5.设置 如果想安装图形化界 ...
- 查看MySQL版本的命令及常用命令
Windows / Linux 系统 前提是已经正确安装了 MySQL,打开 Windows 系统中的命令行工具(Win + R --> 输入 cmd 并按下回车键)--> 输入命令: m ...
- Confluence 6 关于 Decorators
Confluence 是使用开源的 SiteMesh 库构建的.一个 Web 页面的布局系统,这个布局系统能够在全站点中提供完整统一的界面和外观.SiteMesh 是通过 "decorato ...
- Swift中使用oc代码桥接设置
1 将oc的代码拖入项目中 2 新建一个头文件 在头文件中导入你想用的oc头文件 import "****.h" 3 在设置build Setting 中搜索bird 找到 Ob ...