zoukankan      html  css  js  c++  java
  • 用Linq To SQL 搭建底层

    用Linq To SQL 搭建底层

    接口

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Linq.Expressions;
    
    namespace Project.DAL
    {
        interface IBaseService<T> where T:class,new()
        {
            IQueryable<T> QueryAll(params Expression<Func<T, bool>>[] where);
            IQueryable<T> QueryAll<type>(Expression<Func<T, type>> order, bool isAsc = true, params Expression<Func<T, bool>>[] where);
            IQueryable<T> QueryAll<type>(out int total, int skip = 0, int take = 10, Expression<Func<T, type>> order = null, bool isAsc = true, params Expression<Func<T, bool>>[] where);
            void Insert(T t);
            void Insert(IEnumerable<T> t);
            void Delete(T t);
            void Delete(IEnumerable<T> t);
            bool SaveChange();
        }
    }
    

    底层

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Linq.Expressions;
    
    namespace Project.DAL
    {
        public class BaseService<T> : IBaseService<T> where T : class, new()
        {
        //上下文对象
        Models.QuestionDBDataContext dbContext = new Models.QuestionDBDataContext();//直接复制会报错应先在Models里引入数据库
    
        private IQueryable<T> table = null;
        private IQueryable<T> GetTable()
        {
            if (table == null)
            {
                table = (IQueryable<T>)dbContext.GetTable<T>();
            }
            return table;
        }
    
        /// <summary>
        /// 查询
        /// </summary>
        /// <param name="where">查询条件</param>
        /// <returns></returns>
        public IQueryable<T> QueryAll(params Expression<Func<T, bool>>[] where)
        {
            IQueryable<T> iq = GetTable();
            if (where != null || where.Length < 1)
            {
                foreach (var item in where)
                {
                    iq = iq.Where(item);
                }
            }
            return iq;
        }
    
        /// <summary>
        /// 排序
        /// </summary>
        /// <typeparam name="type">排序类型</typeparam>
        /// <param name="order">排序列</param>
        /// <param name="isAsc">升序or降序</param>
        /// <param name="where"></param>
        /// <returns></returns>
        public IQueryable<T> QueryAll<type>(Expression<Func<T, type>> order, bool isAsc = true, params Expression<Func<T, bool>>[] where)
        {
            var iq = QueryAll(where);
            if (isAsc)
            {
                iq = iq.OrderBy(order);
            }
            else
            {
                iq = iq.OrderByDescending(order);
            }
            return iq;
        }
    
        /// <summary>
        /// 分页查询
        /// </summary>
        /// <typeparam name="type"></typeparam>
        /// <param name="total">总数据数</param>
        /// <param name="skip">跳过n条</param>
        /// <param name="take">取n条(一页显示几条)</param>
        /// <param name="order"></param>
        /// <param name="isAsc"></param>
        /// <param name="where"></param>
        /// <returns></returns>
        public IQueryable<T> QueryAll<type>(out int total, int skip = 0, int take = 10, Expression<Func<T, type>> order = null, bool isAsc = true, params Expression<Func<T, bool>>[] where)
        {
            var iq = QueryAll<type>(order, isAsc, where);
            total = iq.Count();
            return iq.Skip(skip).Take(take);
        }
    
        public void Insert(T t)
        {
            dbContext.GetTable<T>().InsertOnSubmit(t);
        }
    
        public void Insert(IEnumerable<T> t)
        {
            dbContext.GetTable<T>().InsertAllOnSubmit(t);
        }
    
        public void Delete(T t)
        {
            dbContext.GetTable<T>().DeleteOnSubmit(t);
        }
    
        public void Delete(IEnumerable<T> t)
        {
            dbContext.GetTable<T>().DeleteAllOnSubmit(t);
        }
    
        /// <summary>
        /// 保存修改
        /// </summary>
        /// <returns></returns>
        public bool SaveChange()
        {
            try
            {
                dbContext.SubmitChanges();
                return true;
            }
            catch (Exception e)
            {
                return false;
            }
        }
    }
    

    }

  • 相关阅读:
    C++顺序性容器、关联性容器与容器适配器
    Groovy与Java集成常见的坑--转
    selenium打开chrome浏览器代码
    分组密码的工作模式--wiki
    linux下C语言多线程编程实例
    C语言多线程pthread库相关函数说明
    C语言使用pthread多线程编程(windows系统)二
    C语言使用pthread多线程编程(windows系统)一
    使用_beginThreadex创建多线程(C语言版多线程)
    浅谈C语言中的联合体
  • 原文地址:https://www.cnblogs.com/setsuna-cn/p/12238422.html
Copyright © 2011-2022 走看看