zoukankan      html  css  js  c++  java
  • DBHelper

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using MongoDB;
    using MongoDB.Linq;
    using System.Web;
    using Commons;
    using System.Linq.Expressions;
    namespace MongoTest
    {
        public class DBHelper
        {
            #region 基本信息
            //public static string ConnectionString = System.Web.Configuration.WebConfigurationManager.AppSettings["MongoServer"].ToString();
            //public static string DatabaseName = System.Web.Configuration.WebConfigurationManager.AppSettings["MongoDBName"].ToString();
            public static string ConnectionString = "server=192.168.1.101:27627";
            public static string DatabaseName = "test";
            static DBHelper()
            {
                var builder = new MongoConnectionStringBuilder(ConnectionString)
                {
                    Username = "",
                    Password = "",
                    MinimumPoolSize = 2,
                    MaximumPoolSize = 120,
                };
                ConnectionString = builder.ToString();
            }
            /// <summary>
            /// 当前Mongo数据库对象
            /// </summary>
            /// <param name="mongo">Mongo对象</param>
            /// <returns>返回当前Mongo数据库对象</returns>
            public static IMongoDatabase GetCurrentDataBase(Mongo mongo)
            {
                return mongo.GetDatabase(DatabaseName);
            }
            /// <summary>
            /// 当前Mongo对象
            /// </summary>
            public static Mongo CurrentMongo
            {
                get
                {
                    return new Mongo(ConnectionString);
                }
            }
            #endregion
            #region 数据查询
            private static IndexOrder GetIndexOrder(DataOrder order)
            {
                IndexOrder orderby = IndexOrder.Descending;
                if (order == DataOrder.Ascending)
                {
                    orderby = IndexOrder.Ascending;
                }
                else
                {
                    orderby = IndexOrder.Descending;
                }
                return orderby;
            }
            /// <summary>
            /// 根据Lamda表达式条件获取上一条或下一条数据
            /// </summary>
            /// <typeparam name="T">类型参数</typeparam>
            /// <param name="selector">查询Lamda表达式</param>
            /// <param name="order">排序</param>
            /// <param name="orderField">排序字段</param>
            /// <returns>返回上一条或下一条数据</returns>
            public static T GetNextOrPrevBySearch<T>(System.Linq.Expressions.Expression<Func<T, bool>> selector, DataOrder order, string orderField) where T : class
            {
                Mongo mongo = null;
                IndexOrder orderby = GetIndexOrder(order);
                try
                {
                    mongo = CurrentMongo;
                    mongo.Connect();
                    var db = GetCurrentDataBase(mongo);
                    IMongoCollection<T> collection = db.GetCollection<T>();
                    int count = collection.Find<T>(selector).Sort(orderField, orderby).Documents.Count();
                    if (count > 0)
                    {
                        return collection.Find<T>(selector).Sort(orderField, orderby).Limit(1).Documents.Single<T>();
                    }
                    else
                    {
                        return null;
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    mongo.Disconnect();
                    mongo.Dispose();
                }
            }
            /// <summary>
            /// 根据条件进行查询,并进行分页
            /// </summary>
            /// <typeparam name="T">类型参数</typeparam>
            /// <param name="selector">条件Lamda表达式</param>
            /// <param name="pageIndex">当前页数</param>
            /// <param name="pageSize">每页的显示记录数</param>
            /// <returns>返回查询的集合</returns>
            public static List<T> GetBySearch<T>(System.Linq.Expressions.Expression<Func<T, bool>> selector, int pageIndex, int pageSize) where T : class
            {
                Mongo mongo = null;
                try
                {
                    mongo = CurrentMongo;
                    mongo.Connect();
                    var db = GetCurrentDataBase(mongo);
                    IMongoCollection<T> collection = db.GetCollection<T>();
                    return collection.Find<T>(selector).Skip((pageIndex - 1) * pageSize).Limit(pageSize).Documents.ToList();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    mongo.Disconnect();
                    mongo.Dispose();
                }
            }
            /// <summary>
            /// 根据条件进行查询,并进行分页和排序
            /// </summary>
            /// <typeparam name="T">类型参数</typeparam>
            /// <param name="selector">条件Lamda表达式</param>
            /// <param name="pageIndex">当前页数</param>
            /// <param name="pageSize">每页的显示记录数</param>
            /// <param name="order">排序规则</param>
            /// <param name="orderField">排序字段</param>
            /// <returns>返回查询的集合</returns>
            public static List<T> GetBySearch<T>(System.Linq.Expressions.Expression<Func<T, bool>> selector, int pageIndex, int pageSize, DataOrder order, string orderField) where T : class
            {
                Mongo mongo = null;
                IndexOrder orderby = GetIndexOrder(order);
                try
                {
                    mongo = CurrentMongo;
                    mongo.Connect();
                    var db = GetCurrentDataBase(mongo);
                    IMongoCollection<T> collection = db.GetCollection<T>();
                    return collection.Find<T>(selector).Sort(orderField, orderby).Skip((pageIndex - 1) * pageSize).Limit(pageSize).Documents.ToList();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    mongo.Disconnect();
                    mongo.Dispose();
                }
            }
            /// <summary>
            /// 条件查询
            /// </summary>
            /// <typeparam name="T">类型参数</typeparam>
            /// <param name="selector">条件Lamda表达式</param>
            /// <returns>返回查询的集合</returns>
            public static List<T> GetBySearch<T>(System.Linq.Expressions.Expression<Func<T, bool>> selector) where T : class
            {
                Mongo mongo = null;
                try
                {
                    mongo = CurrentMongo;
                    mongo.Connect();
                    var db = GetCurrentDataBase(mongo);
                    IMongoCollection<T> collection = db.GetCollection<T>();
                    return collection.Find<T>(selector).Documents.ToList();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    mongo.Disconnect();
                    mongo.Dispose();
                }
            }
            /// <summary>
            /// 条件查询,并进行排序
            /// </summary>
            /// <typeparam name="T">类型参数</typeparam>
            /// <param name="selector">条件Lamda表达式</param>
            /// <param name="order">排序规则</param>
            /// <param name="orderField">排序字段</param>
            /// <returns>返回查询的集合</returns>
            public static List<T> GetBySearch<T>(System.Linq.Expressions.Expression<Func<T, bool>> selector, DataOrder order, string orderField) where T : class
            {
                Mongo mongo = null;
                IndexOrder orderby = GetIndexOrder(order);
                try
                {
                    mongo = CurrentMongo;
                    mongo.Connect();
                    var db = GetCurrentDataBase(mongo);
                    IMongoCollection<T> collection = db.GetCollection<T>();
                    return collection.Find<T>(selector).Sort(orderField, orderby).Documents.ToList();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    mongo.Disconnect();
                    mongo.Dispose();
                }
            }
            /// <summary>
            /// 返回所有数据
            /// </summary>
            /// <typeparam name="T">类型参数</typeparam>
            /// <returns>返回所有数据的集合</returns>
            public static List<T> GetAll<T>() where T : class
            {
                Mongo mongo = null;
                try
                {
                    mongo = CurrentMongo;
                    mongo.Connect();
                    var db = GetCurrentDataBase(mongo);
                    IMongoCollection<T> collection = db.GetCollection<T>();
                    return collection.FindAll().Documents.ToList();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    mongo.Disconnect();
                    mongo.Dispose();
                }
            }
            /// <summary>
            /// 返回所有数据,并排序
            /// </summary>
            /// <typeparam name="T">类型参数</typeparam>
            /// <param name="order">排序规则</param>
            /// <param name="orderField">排序字段</param>
            /// <returns>返回所有数据的集合</returns>
            public static List<T> GetAll<T>(DataOrder order, string orderField) where T : class
            {
                Mongo mongo = null;
                IndexOrder orderby = GetIndexOrder(order);
                try
                {
                    mongo = CurrentMongo;
                    mongo.Connect();
                    var db = GetCurrentDataBase(mongo);
                    IMongoCollection<T> collection = db.GetCollection<T>();
                    return collection.FindAll().Sort(orderField, orderby).Documents.ToList();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    mongo.Disconnect();
                    mongo.Dispose();
                }
            }
            /// <summary>
            /// 返回所有数据并支持分页
            /// </summary>
            /// <typeparam name="T">类型参数</typeparam>
            /// <param name="pageIndex">当前页数</param>
            /// <param name="pageSize">每页显示的记录数</param>
            /// <returns>返回集合</returns>
            public static List<T> GetAll<T>(int pageIndex, int pageSize) where T : class
            {
                Mongo mongo = null;
                try
                {
                    mongo = CurrentMongo;
                    mongo.Connect();
                    var db = GetCurrentDataBase(mongo);
                    IMongoCollection<T> collection = db.GetCollection<T>();
                    return collection.FindAll().Skip((pageIndex - 1) * pageSize).Limit(pageSize).Documents.ToList();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    mongo.Disconnect();
                    mongo.Dispose();
                }
            }
            /// <summary>
            /// 返回所有数据并支持分页排序
            /// </summary>
            /// <typeparam name="T">类型参数</typeparam>
            /// <param name="pageIndex">当前页数</param>
            /// <param name="pageSize">每页显示的记录数</param>
            /// <param name="order">排序规则</param>
            /// <param name="orderField">排序字段名</param>
            /// <returns>返回集合</returns>
            public static List<T> GetAll<T>(int pageIndex, int pageSize, DataOrder order, string orderField) where T : class
            {
                Mongo mongo = null;
                IndexOrder orderby = GetIndexOrder(order);
                try
                {
                    mongo = CurrentMongo;
                    mongo.Connect();
                    var db = GetCurrentDataBase(mongo);
                    IMongoCollection<T> collection = db.GetCollection<T>();
                    return collection.FindAll().Sort(orderField, orderby).Skip((pageIndex - 1) * pageSize).Limit(pageSize).Documents.ToList();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    mongo.Disconnect();
                    mongo.Dispose();
                }
            }
            /// <summary>
            /// 返回前几条数据
            /// </summary>
            /// <typeparam name="T">类型参数</typeparam>
            /// <param name="topNumber">返回数量</param>
            /// <param name="order">排序规则</param>
            /// <param name="orderField">排序字段</param>
            /// <returns>返回结果集合</returns>
            public static List<T> GetTopList<T>(int topNumber, DataOrder order, string orderField) where T : class
            {
                Mongo mongo = null;
                IndexOrder orderby = GetIndexOrder(order);
                try
                {
                    mongo = CurrentMongo;
                    mongo.Connect();
                    var db = GetCurrentDataBase(mongo);
                    IMongoCollection<T> collection = db.GetCollection<T>();
                    return collection.FindAll().Sort(orderField, orderby).Limit(topNumber).Documents.ToList();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    mongo.Disconnect();
                    mongo.Dispose();
                }
            }
            /// <summary>
            /// 根据条件查询一个对象
            /// </summary>
            /// <typeparam name="T">类型参数</typeparam>
            /// <param name="selector">查询条件Lamda表达式</param>
            /// <returns></returns>
            public static T GetOneBySearch<T>(System.Linq.Expressions.Expression<Func<T, bool>> selector) where T : class
            {
                Mongo mongo = null;
                try
                {
                    mongo = CurrentMongo;
                    mongo.Connect();
                    var db = GetCurrentDataBase(mongo);
                    IMongoCollection<T> collection = db.GetCollection<T>();
                    return collection.FindOne<T>(selector);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    mongo.Disconnect();
                    mongo.Dispose();
                }
            }
            /// <summary>
            /// 统计总记录数
            /// </summary>
            /// <typeparam name="T">类型参数</typeparam>
            /// <returns>返回总记录数</returns>
            public static long GetTotalCount<T>() where T : class
            {
                Mongo mongo = null;
                try
                {
                    mongo = CurrentMongo;
                    mongo.Connect();
                    var db = GetCurrentDataBase(mongo);
                    IMongoCollection<T> collection = db.GetCollection<T>();
                    return collection.Count();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    mongo.Disconnect();
                    mongo.Dispose();
                }
            }
            /// <summary>
            /// 根据条件获取总记录数
            /// </summary>
            /// <typeparam name="T">类型参数</typeparam>
            /// <param name="selector">查询条件委托</param>
            /// <returns>返回总记录数</returns>
            public static int GetTotalCountBySearch<T>(System.Linq.Expressions.Expression<Func<T, bool>> selector) where T : class
            {
                Mongo mongo = null;
                try
                {
                    mongo = CurrentMongo;
                    mongo.Connect();
                    var db = GetCurrentDataBase(mongo);
                    IMongoCollection<T> collection = db.GetCollection<T>();
                    return collection.Count<T>(selector);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    mongo.Disconnect();
                    mongo.Dispose();
                }
            }
            #endregion
            #region 数据插入
            /// <summary>
            /// 插入数据
            /// </summary>
            /// <typeparam name="T">类型参数</typeparam>
            /// <param name="t">要插入的对象</param>
            public static void Insert<T>(T t) where T : class
            {
                Mongo mongo = null;
                try
                {
                    mongo = CurrentMongo;
                    mongo.Connect();
                    var db = GetCurrentDataBase(mongo);
                    db.GetCollection<T>().Save(t);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    mongo.Disconnect();
                    mongo.Dispose();
                }
            }
            #endregion
            #region 数据更新
            /// <summary>
            /// 更新数据(带条件)
            /// </summary>
            /// <typeparam name="T">类型参数</typeparam>
            /// <param name="t">更新的对象修改</param>
            /// <param name="selector">更新的条件Lamda表达式</param>
            public static void Update<T>(T t, System.Linq.Expressions.Expression<Func<T, bool>> selector) where T : class
            {
                Mongo mongo = null;
                try
                {
                    mongo = CurrentMongo;
                    mongo.Connect();
                    var db = GetCurrentDataBase(mongo);
                    db.GetCollection<T>().Update<T>(t, selector);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    mongo.Disconnect();
                    mongo.Dispose();
                }
            }
            /// <summary>
            /// 更新数据
            /// </summary>
            /// <typeparam name="T">类型参数</typeparam>
            /// <param name="t">要更新的对象</param>
            public static void Update<T>(T t) where T : class
            {
                Mongo mongo = null;
                try
                {
                    mongo = CurrentMongo;
                    mongo.Connect();
                    var db = GetCurrentDataBase(mongo);
                    db.GetCollection<T>().Save(t);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    mongo.Disconnect();
                    mongo.Dispose();
                }
            }
            #endregion
            #region 数据删除
            /// <summary>
            /// 数据删除
            /// </summary>
            /// <typeparam name="T">类型参数</typeparam>
            /// <param name="selector">查询的条件Lamda表达式</param>
            public static void Delete<T>(System.Linq.Expressions.Expression<Func<T, bool>> selector) where T : class
            {
                Mongo mongo = null;
                try
                {
                    mongo = CurrentMongo;
                    mongo.Connect();
                    var db = GetCurrentDataBase(mongo);
                    db.GetCollection<T>().Remove<T>(selector);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    mongo.Disconnect();
                    mongo.Dispose();
                }
            }
            #endregion
        }
    }
  • 相关阅读:
    OO&nbsp;ALV&nbsp;实现下拉框
    ABAP数据库修改字段(由其是主键)…
    使用Pattern调用自建的模板
    批次属性相关增强
    pyhton gevent库安装的蛋疼问题
    【转】Linux Crontab 定时任务 命令详解
    【转】windows下apache+wsgi+web.py环境搭建
    【转】PyScripter启动出错:Python could not be properly initialized. We must quit.
    cookie和session的区别
    无限极分类
  • 原文地址:https://www.cnblogs.com/fx2008/p/2779866.html
Copyright © 2011-2022 走看看