/// <summary>
/// 查询业务基实现
/// </summary>
/// <typeparam name="T"></typeparam>
public class QueryBaseBusiness<T> : IQueryBaseBusiness<T> where T : class
{
/// <summary>
/// 是否跟踪上下文
/// <para>可提升性能</para>
/// </summary>
public bool asNoTracking { get; set; } /// <summary>
/// 数据上下文对象
/// </summary>
public Payu_DatabaseContext context { get; set; } /// <summary>
/// Initializes a new instance of the <see cref="Payu.Business.Base.QueryBaseBusiness{T}"/> class.
/// </summary>
public QueryBaseBusiness()
{
context = EFContextFactory.GetCurrentDbContext();
} /// <summary>
/// 设置query 查询对象
/// </summary>
/// <param name="query">The query.</param>
/// <returns></returns>
public IQueryable<T> SetQueryable(IQueryable<T> query)
{
if (!this.asNoTracking)
{
query = query.AsNoTracking();
} return query;
} /// <summary>
/// 设置query 查询对象
/// </summary>
/// <param name="query">The query.</param>
/// <returns></returns>
public IQueryable<OutT> SetQueryable<OutT>(IQueryable<OutT> query) where OutT : class
{
if (!this.asNoTracking)
{
query = query.AsNoTracking();
} return query;
} /// <summary>
/// 根据表达式查询返回总个数.
/// </summary>
/// <param name="where">The where.</param>
/// <returns></returns>
public IBusinessResponse<Int32> GetCount(Expression<Func<T, bool>> where)
{
var count = this.GetQueryable(where).Count(); return new BusinessResponse<Int32>(count);
} /// <summary>
/// 根据表达式查询返回总个数
/// </summary>
/// <param name="where"></param>
/// <param name="selectExpression">统计的对象</param>
/// <returns></returns>
public IBusinessResponse<Int32> GetCount<TKey>(Expression<Func<T, bool>> where, Expression<Func<T, TKey>> selectExpression)
{
var query = this.GetQueryable(where); var count = query.Select(selectExpression).Count(); return new BusinessResponse<Int32>(count);
} /// <summary>
/// 根据 where 返回集合对象
/// </summary>
/// <param name="where"></param>
/// <returns></returns>
public IBusinessResponse<ICollection<T>> GetByWhere(Expression<Func<T, bool>> where)
{
var result = this.GetQueryable(where).ToList(); return new BusinessResponse<ICollection<T>>(result);
} /// <summary>
/// 根据 where 条件返回 集合对象
/// </summary>
/// <typeparam name="TOut">返回类型</typeparam>
/// <param name="where">查询条件.</param>
/// <param name="selectExpression">查询表达式</param>
/// <returns></returns>
public IBusinessResponse<ICollection<TOut>> GetByWhere<TOut>(Expression<Func<T, bool>> where, Expression<Func<T, TOut>> selectExpression)
{
var query_data = this.GetQueryable().Where(where).Select(selectExpression).ToList(); return new BusinessResponse<ICollection<TOut>>(query_data);
} /// <summary>
/// 根据 where 条件返回 集合对象
/// </summary>
/// <typeparam name="TOut">返回的泛型类型</typeparam>
/// <typeparam name="TKey">排序的类型</typeparam>
/// <param name="where">查询条件.</param>
/// <param name="orderLambda">排序表达式</param>
/// <param name="selectExpression">查询表达式</param>
/// <returns></returns>
public IBusinessResponse<ICollection<TOut>> GetByWhere<TOut, TKey>(Expression<Func<T, bool>> where, Expression<Func<T, TKey>> orderLambda, Expression<Func<T, TOut>> selectExpression)
{
var query_data = this.GetQueryable().Where(where).OrderBy(orderLambda).Select(selectExpression).ToList(); return new BusinessResponse<ICollection<TOut>>(query_data);
} /// <summary>
/// 根据表达式返回单个元素
/// </summary>
/// <param name="where"></param>
/// <returns></returns>
public IBusinessResponse<T> GetFirstByWhere(Expression<Func<T, bool>> where)
{
var entity = this.GetQueryable(where).FirstOrDefault(); if (entity == null)
{
return new BusinessResponse<T>(false, "数据不存在", "Not_Data");
} return new BusinessResponse<T>(entity);
} /// <summary>
/// 根据表达式返回单个元素
/// <para>带有Select</para>
/// </summary>
/// <param name="where"></param>
/// <param name="selectExpression">查询对象</param>
/// <returns></returns>
public IBusinessResponse<TOut> GetFirstByWhere<TOut>(Expression<Func<T, bool>> where, Expression<Func<T, TOut>> selectExpression)
{
var query = this.GetQueryable(where); var entity = query.Select(selectExpression).FirstOrDefault(); return new BusinessResponse<TOut>(entity);
} /// <summary>
/// 获得唯一一个对象
/// </summary>
/// <param name="where"></param>
/// <returns></returns>
public IBusinessResponse<T> GetSingleByWhere(Expression<Func<T, bool>> where)
{
var entity = context.Set<T>().Where(where).SingleOrDefault(); if (entity == null)
{
return new BusinessResponse<T>(false, "数据不存在", "Not_Data");
}
return new BusinessResponse<T>(entity);
} /// <summary>
/// 获得唯一一个对象
/// </summary>
/// <param name="where"></param>
/// <param name="selectExpression"></param>
/// <returns></returns>
public IBusinessResponse<TOut> GetSingleByWhere<TOut>(Expression<Func<T, bool>> where, Expression<Func<T, TOut>> selectExpression)
{
var entity = this.GetQueryable(where).Select(selectExpression).SingleOrDefault(); return new BusinessResponse<TOut>(entity);
} /// <summary>
/// 根据表达式返回最后一个元素
/// </summary>
/// <param name="where"></param>
/// <returns></returns>
public IBusinessResponse<T> GetLastByWhere(Expression<Func<T, bool>> where)
{
var query = context.Set<T>().Where(where).AsQueryable(); var entity = query.LastOrDefault(); if (entity == null)
{
return new BusinessResponse<T>(false, "数据不存在", "Not_Data");
} return new BusinessResponse<T>(entity);
} /// <summary>
/// 根据表达式返回最后一个元素
/// </summary>
/// <typeparam name="TOut">The type of the out.</typeparam>
/// <param name="where">The where.</param>
/// <param name="selectExpression">The select expression.</param>
/// <returns></returns>
public IBusinessResponse<TOut> GetLastByWhere<TOut>(Expression<Func<T, bool>> where, Expression<Func<T, TOut>> selectExpression)
{
var query = this.GetQueryable(where); var entity = query.Select(selectExpression).LastOrDefault(); return new BusinessResponse<TOut>(entity);
} /// <summary>
///
/// </summary>
/// <param name="where"></param>
/// <returns></returns>
public IBusinessResponse<bool> AnyByWhere(Expression<Func<T, bool>> where)
{
var isAny = this.GetQueryable().Any(where);
if (isAny)
{
return new BusinessResponse<bool>(true, "已存在", "Exist_Data")
{
Data = true
};
} return new BusinessResponse<bool>(false, "不存在", "Not_Data");
} /// <summary>
/// 获得指定的查询对象
/// </summary>
/// <returns></returns>
public IQueryable<TOut> GetQueryable_Out<TOut>(Expression<Func<TOut, bool>> where) where TOut : class
{
var query = this.context.Set<TOut>().Where(where); query = SetQueryable(query); return query;
} /// <summary>
/// 获得当前的查询对象
/// </summary>
/// <returns></returns>
public IQueryable<OutT> GetQueryable_Out<OutT>() where OutT : class
{
var query = this.context.Set<OutT>().AsQueryable(); query = SetQueryable(query); return query;
} /// <summary>
/// 执行分页
/// </summary>
/// <param name="query">查询对象</param>
/// <param name="result">返回对象</param>
/// <param name="paging">分页对象</param>
public IPagingBusinessResponse<ICollection<OutT>> ExecutePage_Out<OutT>(IQueryable<OutT> query, IPagingBusinessResponse<ICollection<OutT>> result, Paging paging) where OutT : class
{
result.Data = query.Skip((paging.PageIndex - 1) * paging.PageSize).Take(paging.PageSize).ToList(); paging.Total = query.FutureCount().Value; paging.PageSize = paging.PageSize; paging.PageIndex = paging.PageIndex; result.Paging = paging; return result;
} /// <summary>
/// 获得当前的查询对象
/// </summary>
/// <returns></returns>
public virtual IQueryable<T> GetQueryable()
{
var query = this.context.Set<T>().AsQueryable(); query = SetQueryable(query); return query;
} /// <summary>
/// 获得当前的查询对象
/// </summary>
/// <returns></returns>
public virtual IQueryable<T> GetQueryable(Expression<Func<T, bool>> where)
{
var query = this.context.Set<T>().Where(where); query = SetQueryable(query); return query;
} /// <summary>
/// 获得当前的查询对象
/// </summary>
/// <returns></returns>
public IQueryable<dynamic> GetQueryable(Expression<Func<T, bool>> where, Expression<Func<T, dynamic>> selectExpression)
{
var query = this.context.Set<T>().Where(where); query = SetQueryable(query); return query.Select(selectExpression);
} /// <summary>
/// 获得当前的查询对象
/// </summary>
/// <returns></returns>
public IQueryable<TOut> GetQueryable<TOut>(Expression<Func<T, bool>> where, Expression<Func<T, TOut>> selectExpression)
{
var query = this.context.Set<T>().Where(where); query = SetQueryable(query); return query.Select(selectExpression);
} /// <summary>
/// 执行分页_动态操作
/// </summary>
/// <param name="query">查询对象</param>
/// <param name="result">返回对象</param>
/// <param name="paging">分页对象</param>
/// <param name="selectExpression"></param>
public IPagingBusinessResponse<dynamic> ExecutePage_Dynamic(IQueryable<T> query, IPagingBusinessResponse<dynamic> result, Paging paging, Expression<Func<T, dynamic>> selectExpression)
{
result.Data = query.Select(selectExpression).Skip((paging.PageIndex - 1) * paging.PageSize).Take(paging.PageSize).ToList(); paging.Total = query.FutureCount().Value; paging.PageSize = paging.PageSize; paging.PageIndex = paging.PageIndex; result.Paging = paging; return result;
} /// <summary>
/// 执行分页_动态操作
/// </summary>
/// <param name="where">查询条件</param>
/// <param name="orderLambda">排序表达式</param>
/// <param name="codeOrderType">排序方式</param>
/// <param name="paging">分页参数</param>
/// <param name="selectExpression">动态类型</param>
/// <returns></returns>
public IPagingBusinessResponse<dynamic> ExecutePage_Dynamic<TKey>(Expression<Func<T, bool>> where, Expression<Func<T, TKey>> orderLambda, CodeOrderType codeOrderType, Paging paging, Expression<Func<T, dynamic>> selectExpression)
{ var query = this.GetQueryable(where); if (codeOrderType == CodeOrderType.Asc)
{
query = query.OrderBy(orderLambda);
}
else if (codeOrderType == CodeOrderType.Desc)
{
query = query.OrderByDescending(orderLambda);
} var result = new PagingBusinessResponse<dynamic>
{
Data = query.Select(selectExpression).Skip((paging.PageIndex - 1) * paging.PageSize).Take(paging.PageSize).ToList()
}; paging.Total = query.FutureCount().Value; paging.PageSize = paging.PageSize; paging.PageIndex = paging.PageIndex; result.Paging = paging; return result;
} /// <summary>
/// 执行分页
/// <para>返回动态对象</para>
/// </summary>
/// <param name="query">查询对象</param>
/// <param name="paging">分页对象</param>
/// <param name="selectExpression">动态表达式</param>
public IPagingBusinessResponse<dynamic> ExecutePage_Dynamic(IQueryable<T> query, Paging paging, Expression<Func<T, dynamic>> selectExpression)
{
var result = new PagingBusinessResponse<dynamic>
{
Data = query.Select(selectExpression).Skip((paging.PageIndex - 1) * paging.PageSize).Take(paging.PageSize).ToList()
}; paging.Total = query.FutureCount().Value; paging.PageSize = paging.PageSize; paging.PageIndex = paging.PageIndex; result.Paging = paging; return result;
} /// <summary>
/// 执行分页
/// </summary>
/// <param name="query">查询对象</param>
/// <param name="result">返回对象</param>
/// <param name="paging">分页对象</param>
public IPagingBusinessResponse<ICollection<T>> ExecutePage(IQueryable<T> query, IPagingBusinessResponse<ICollection<T>> result, Paging paging)
{
result.Data = query.Skip((paging.PageIndex - 1) * paging.PageSize).Take(paging.PageSize).ToList(); paging.Total = query.FutureCount().Value; paging.PageSize = paging.PageSize; paging.PageIndex = paging.PageIndex; result.Paging = paging; return result;
} /// <summary>
/// 执行分页
/// </summary>
/// <param name="query">查询对象</param>
/// <param name="paging">分页对象</param>
public IPagingBusinessResponse<ICollection<T>> ExecutePage(IQueryable<T> query, Paging paging)
{
var result = new PagingBusinessResponse<ICollection<T>>
{
Data = query.Skip((paging.PageIndex - 1) * paging.PageSize).Take(paging.PageSize).ToList()
}; paging.Total = query.FutureCount().Value; paging.PageSize = paging.PageSize; paging.PageIndex = paging.PageIndex; result.Paging = paging; return result;
} /// <summary>
/// 执行分页
/// <para>返回传入的类型</para>
/// </summary>
/// <typeparam name="Tout">返回的类型</typeparam>
/// <param name="query">当前的查询对象</param>
/// <param name="paging">分页参数</param>
/// <param name="selectExpression">查询表达式</param>
/// <returns></returns>
public IPagingBusinessResponse<ICollection<Tout>> ExecutePage<Tout>(IQueryable<T> query, Paging paging, Expression<Func<T, Tout>> selectExpression)
{
var result = new PagingBusinessResponse<ICollection<Tout>>
{
Data = query.Select(selectExpression).Skip((paging.PageIndex - 1) * paging.PageSize).Take(paging.PageSize).ToList()
}; // paging.Total = query.FutureCount().Value; paging.Total = query.Count(); paging.PageSize = paging.PageSize; paging.PageIndex = paging.PageIndex; result.Paging = paging; return result;
} /// <summary>
/// 获得题目下的所有题意理解
/// </summary>
/// <param name="id">编号</param>
/// <returns></returns>
public IBusinessResponse<T> GetById(dynamic id)
{
var entity = context.Set<T>().Find(id); if (entity == null)
{
return new BusinessResponse<T>(false, "编号" + id + "不存在", "Not_Data");
} return new BusinessResponse<T>(entity);
} /// <summary>
/// Executes the select SQL.
/// <para>执行查询语句</para>
/// <para>返回TIn 泛型单个对象</para>
/// </summary>
/// <typeparam name="TIn">返回映射泛型</typeparam>
/// <param name="sql">The SQL.</param>
/// <returns></returns>
public TIn ExecSelectSql<TIn>(string sql)
{
return context.Database.SqlQuery<TIn>(sql).FirstOrDefault();
} /// <summary>
/// Executes the select SQL.
/// <para>执行查询语句</para>
/// <para>返回TIn 泛型单个对象</para>
/// </summary>
/// <typeparam name="TIn">返回映射泛型</typeparam>
/// <param name="sql">The SQL.</param>
/// <param name="parameters">The parameters.</param>
/// <returns></returns>
public TIn ExecSelectSql<TIn>(string sql, params object[] parameters)
{ return context.Database.SqlQuery<TIn>(sql, parameters).FirstOrDefault();
} /// <summary>
/// Executes the select SQL to list.
/// <para>执行查询语句并返回集合列表</para>
/// <para>返回TIn 泛型集合对象</para>
/// </summary>
/// <typeparam name="TIn">返回映射泛型</typeparam>
/// <param name="sql">The SQL.</param>
/// <returns></returns>
public List<TIn> ExecSelectSqlToList<TIn>(string sql)
{
return context.Database.SqlQuery<TIn>(sql).ToList();
} /// <summary>
/// Executes the select SQL to list.
/// <para>执行查询语句并返回集合列表</para>
/// <para>返回TIn 泛型集合对象</para>
/// </summary>
/// <typeparam name="TIn">返回映射泛型</typeparam>
/// <param name="sql">The SQL.</param>
/// <param name="parameters">The parameters.</param>
/// <returns></returns>
public List<TIn> ExecSelectSqlToList<TIn>(string sql, params object[] parameters)
{
return context.Database.SqlQuery<TIn>(sql, parameters).ToList();
} /// <summary>
/// Executes the command SQL
/// <para>执行命令的SQL</para>
/// </summary>
/// <typeparam name="TIn">The type of the in.</typeparam>
/// <param name="sql">The SQL.</param>
/// <param name="parameters">The parameters.</param>
/// <returns></returns>
public int ExecCommandSql<TIn>(string sql, params object[] parameters)
{
return context.Database.ExecuteSqlCommand(sql, parameters);
} /// <summary>
/// 根据主键批量物理删除
/// </summary>
/// <param name="where">where条件</param>
/// <returns></returns>
public IBusinessResponse<bool> Remove(Expression<Func<T, bool>> where)
{
return this.Remove(GetQueryable(where));
} /// <summary>
/// 根据主键批量物理删除
/// </summary>
/// <param name="queryable">可查询对象</param>
/// <returns></returns>
public IBusinessResponse<bool> Remove(IQueryable<T> queryable)
{
var rowNumber = queryable.Delete(); if (rowNumber == 0)
{
return new BusinessResponse<bool>(false, "删除失败", "Not_Row", false);
}
return new BusinessResponse<bool>(true, "删除成功", "Success", true);
} }

  

entity framework 封装基类的更多相关文章

  1. Python+Selenium框架设计之框架内封装基类和实现POM

    原文地址https://blog.csdn.net/u011541946/article/details/70269965 作者:Anthony_tester 来源:CSDN    博客地址https ...

  2. 微信公众号开发系列-Http请求封装基类

    HttpHelper请求封装基类,支持get请求和POS请求,方便微信开发接口交互,为后面接口交互做准备. 1.HttpHelper帮助基类 [csharp] view plaincopy using ...

  3. Http请求封装基类HttpHelper.cs

    HttpHelper请求封装基类,支持get请求和POS请求http接口交互,为后面接口交互做准备. 1.HttpHelper帮助基类 using System; using System.Colle ...

  4. Asp.Net MVC 使用Entity Framework创建模型类

    先来说说LINQ to SQL和Entity Framework的区别: LINQ to SQL和Entity Framework都是一种包含LINQ功能的对象关系映射技术.他们之间的本质区别在于EF ...

  5. Asp.Net MVC 模型(使用Entity Framework创建模型类) - Part.1

    这篇教程的目的是解释在创建ASP.NET MVC应用程序时,如何使用Microsoft Entity Framework来创建数据访问类.这篇教程假设你事先对Microsoft Entity Fram ...

  6. Asp.Net MVC 模型(使用Entity Framework创建模型类)

    这篇教程的目的是解释在创建ASP.NET MVC应用程序时,如何使用Microsoft Entity Framework来创建数据访问类.这篇教程假设你事先对Microsoft Entity Fram ...

  7. Entity FrameWork 6帮助类

    public class BaseDAL { string strConn = ""; public BaseDAL(string connString) { strConn = ...

  8. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  9. Entity Framework快速入门--直接修改(简要介绍ObjectContext处理机制)

    在介绍Entity Framework的修改实体到数据库的方法之前呢,我们先简要的介绍一下ObjectContext的处理机制. 1.ObjectContext的处理机制 ObjectContext是 ...

随机推荐

  1. XxPay支付系统-boot版本了解一下

    了解一下 之前看了龙果支付系统,也没看透,用公司框架改写,然后就改的比较乱

  2. 什么是uuid以及uuid在java中的使用

    什么是UUID?UUID是Universally Unique Identifier的缩写,它是在一定的范围内(从特定的名字空间到全球)唯一的机器生成的标识符.UUID具有以下涵义: 经由一定的算法机 ...

  3. Codeforces Round #315 (Div. 2)——C. Primes or Palindromes?

    这道题居然是一个大暴力... 题意: π(n):小于等于n的数中素数的个数 rub(n) :小于等于n的数中属于回文数的个数 然后给你两个数p,q,当中A=p/q. 然后要你找到对于给定的A.找到使得 ...

  4. js进阶 11-12 jquery如何实现节点的删除和复制

    js进阶 11-12  jquery如何实现节点的删除和复制 一.总结 一句话总结:remove().detach().empty()方法 1.jquery删除节点中的remove()方法和detac ...

  5. RSA解密时javax.crypto.BadPaddingException: Data must start with zero

    解决方法:要在加密后产生的byte数组转成string时要在各byte之间加个标识符,我加了个空格,然后再根据空格分隔转换回byte数组.如果不加标识符,由于byte值可能是一位到三位,无法知道某一个 ...

  6. ArcGIS Engine中正确释放打开资源

    转自原文 ArcGIS Engine中正确释放打开资源 AE中对MDB,SDE等数据库操作时,打开后却往往不能及时释放资源,导致别人操作提示对象被锁定. 很多帖子说了很多原理,看的也烦且不实用,比如一 ...

  7. 【转】优先队列priority_queue 用法详解

    http://www.cnblogs.com/void/archive/2012/02/01/2335224.html 优先队列是队列的一种,不过它可以按照自定义的一种方式(数据的优先级)来对队列中的 ...

  8. [React Router v4] Style a Link that is Active with NavLink

    We often need to be able to apply style to navigation links based on the current route. In React Rou ...

  9. 算法 Tricks(五)—— 二进制逻辑运算

    int flag = 1; while ( (data & flag) == 0 ) flag <<= 1; 判断某数的二进制形式的某位(第 k 位)是否为 1,将其与 2k 相与 ...

  10. BZOJ 2064 - 状压DP

    传送门 题目大意: 给两个数组, 数组中的两个元素可以合并成两元素之和,每个元素都可以分裂成相应的大小,问从数组1变化到数组2至少需要多少步? 题目分析: 看到数据范围\(n<=10\), 显然 ...