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;
            }
        }
    }
    

    }

  • 相关阅读:
    window端口被占用
    webstorm中关闭烦人Eslint语法检查
    STM32 printf 函数原型
    Memset、Memcpy、Strcpy 的作用和区别(转)
    SMD贴片元件的封装尺寸(转)
    Windows Phone开发工具初体验(转载)
    Open Cell(转载)
    标题:常用贴片元件封装(转载)
    关于TV Dongle的功能设计和思考【图】(转载)
    图片预览加上传遇到的一系列问题
  • 原文地址:https://www.cnblogs.com/setsuna-cn/p/12238422.html
Copyright © 2011-2022 走看看