期货大赛项目|二,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 ...
随机推荐
- 用WMI监控IIS
参考网站:http://blog.chinaunix.net/uid-7910284-id-5774420.html 参考官方文档:https://docs.microsoft.com/en-us/p ...
- Python在线聊天软件(Tkinter)
1.python2.7下安装 apt-get install python-tk 主要功能是实现客户端与服务器端的双向通信,这个小东西用到的主要知识点: 1.Python Socket:2.Pytho ...
- UR#13 SRAND
总感觉这位大仙讲的很清楚:bztminamoto 题意 题目讲的是求 l~r 内所有数的次大质因子,这里设 f(x) 为 x 的次大质因子 我们差分一下就变成求两个前缀和信息了 按照套路,我们考虑 S ...
- URLConnection和HttpURLConnection
URLConnection和HttpURLConnection使用的都是java.net中的类,属于标准的java接口. HttpURLConnection继承自URLConnection,差别在与H ...
- linux无法启动httpd服务问题
httpd 服务启动报错,可能出现的问题比较多,通过查看日志看是什么报错 (tail 200f /etc/httpd/logs/error_log) 1.查看防火墙是不是关闭状态 2.查看80端口是 ...
- Cassandra docker 使用记录
环境介绍: docker 安装 cassandra 3.11.1 , 然后进入docker 的终端,输入 > cqlsh , 即可使用Cassandra了,详细介绍如下: 查看表空间descri ...
- 1-HTML Attributes
下表列举了常用的Html属性 Attribute Description alt Specifies an alternative text for an image, when the image ...
- 51nod--1212 最小生成树
题目: 1212 无向图最小生成树 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 N个点M条边的无向连通图,每条边有一个权值,求该图的最小生成树. Inpu ...
- Truffle框架环境搭建
注意:本教程需要Truffle4.0或者是更高的版本 以太坊的智能合约只是代码,和我们的纸质代码不同,此合同需要非常精确的方式理解 如果合同编码不正确,我们的交易可能会失败,会导致gas的损失,更不用 ...
- 修复ogg source端意外宕机造成的数据不同步
修复ogg source端意外宕机造成的数据不同步 分类: Oracle2016-04-28 11:50:40原文地址:修复ogg source端意外宕机造成的数据不同步 作者:十字螺丝钉 ogg s ...