<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
上一篇.NET整合ORM框架HiSql 已經完成了Hisql的引入,本節就把 專案中的選單管理改成hisql的方式實現。
選單管理介面如圖:
1、 在 BaseRepository 倉儲基礎類別中新增 hisql存取物件:HiSqlClient。這樣 所有繼承了BaseRepository的業務倉儲類都可以使用HiSqlClient運算元據庫。本節中的選單管理用到的倉儲物件就是:SysMenuRepository
2、修改 SysMenuRepository類中存取資料的程式碼,將所有運算元據庫的地方使用HiSql方式實現。
3、查詢業務:獲取選單詳情
/// <summary> /// 獲取選單詳情 /// </summary> /// <param name="menuId"></param> /// <returns></returns> public SysMenu SelectMenuById(int menuId) { //hisql方式 return ContextHiSql.HiSql(@"select * from sys_menu where menuId = @menuId ", new { menuId = menuId }) .ToList<SysMenu>().FirstOrDefault(); //sqlsuar方式 return Context.Queryable<SysMenu>().Where(it => it.menuId == menuId).Single(); }
4、修改業務:編輯選單
/// <summary> /// 編輯選單 /// </summary> /// <param name="menu"></param> /// <returns></returns> public int EditMenu(SysMenu menu) { //hisql方式 return ContextHiSql.Update("sys_menu", menu).ExecCommand(); //sqlsugar方式 return Context.Updateable(menu).ExecuteCommand(); }
5、刪除業務:刪除選單
/// <summary> /// 刪除選單 /// </summary> /// <param name="menuId"></param> /// <returns></returns> public int DeleteMenuById(long menuId) { //hisql方式 return ContextHiSql.Delete("sys_menu").Where(new Filter { { "menuId", OperType.EQ, menuId } }).ExecCommand(); //sqlsugar方式 return Context.Deleteable<SysMenu>().Where(it => it.menuId == menuId).ExecuteCommand(); }
6、新增業務:新增選單
/// <summary> /// 新增選單 /// </summary> /// <param name="menu"></param> /// <returns></returns> public int AddMenu(SysMenu menu) { var Db = Context; menu.Create_time = Db.GetDate(); menu.menuId = IDHelper.GetLongId(); //hisql方式 return ContextHiSql.Insert("sys_menu", menu).ExecCommand(); //sqlsugar方式 return Db.Insertable(menu).ExecuteCommand(); }
Tip:此處使用雪花ID,其實HiSql自帶相關方法。如 HiSql.Snowflake.NextId(); 以及業務根據業務實際情況自定義編號的模組,後面再整合到專案中來。 自定義編號
其他業務方法見 SysMenuRepository 程式碼。
SysMenuRepository 程式碼
using Infrastructure.Attribute; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using HSMB.Model.System.Dto; using HSMB.Model.System; using HiSql; using Infrastructure; namespace HSMB.Repository.System { /// <summary> /// 系統選單 /// </summary> [AppService(ServiceLifetime = LifeTime.Transient)] public class SysMenuRepository : BaseRepository<SysMenu> { /// <summary> /// 獲取所有選單(選單管理) /// </summary> /// <returns></returns> public List<SysMenu> SelectMenuList(SysMenu menu) { //hisql方式 Filter filters = new Filter(); filters.AddIf(!string.IsNullOrEmpty(menu.menuName), "menuName", OperType.LIKE, menu.menuName); filters.AddIf(!string.IsNullOrEmpty(menu.visible), "visible", OperType.EQ, menu.visible); filters.AddIf(!string.IsNullOrEmpty(menu.menuName), "status", OperType.EQ, menu.status); return ContextHiSql.Query("sys_menu").Field("*").Where(filters).Sort("parentId", "orderNum").ToList<SysMenu>(); //sqlsugar方式 return Context.Queryable<SysMenu>() .WhereIF(!string.IsNullOrEmpty(menu.menuName), it => it.menuName.Contains(menu.menuName)) .WhereIF(!string.IsNullOrEmpty(menu.visible), it => it.visible == menu.visible) .WhereIF(!string.IsNullOrEmpty(menu.status), it => it.status == menu.status) .OrderBy(it => new { it.parentId, it.orderNum }) .ToList(); } /// <summary> /// 根據使用者查詢系統選單列表 /// </summary> /// <param name="sysMenu"></param> /// <param name="userId">使用者id</param> /// <returns></returns> public List<SysMenu> SelectMenuListByUserId(SysMenu sysMenu, long userId) { //hisql方式 Filter filters = new Filter(); filters.Add("userRole.UserId", OperType.EQ, userId); filters.AddIf(!string.IsNullOrEmpty(sysMenu.menuName), "menu.menuName", OperType.LIKE, sysMenu.menuName); filters.AddIf(!string.IsNullOrEmpty(sysMenu.visible), "menu.visible", OperType.EQ, sysMenu.visible); filters.AddIf(!string.IsNullOrEmpty(sysMenu.menuName), "menu.status", OperType.EQ, sysMenu.status); return ContextHiSql.HiSql(@"select menu.* from sys_menu as menu join sys_role_menu as roleMenu on menu.menuId = roleMenu.menuId join sys_user_role as userRole on userRole.Role_id = roleMenu.Role_id join sys_role as role on role.RoleId = userRole.RoleId order by menu.parentId, menu.orderNum ").Where(filters).ToList<SysMenu>(); // //sqlsugar方式 return Context.Queryable<SysMenu, SysRoleMenu, SysUserRole, SysRole>((menu, roleMenu, userRole, role) => new JoinQueryInfos( SqlSugar.JoinType.Left, menu.menuId == roleMenu.Menu_id, SqlSugar.JoinType.Left, roleMenu.Role_id == userRole.RoleId, SqlSugar.JoinType.Left, userRole.RoleId == role.RoleId )) .Where((menu, roleMenu, userRole, role) => userRole.UserId == userId) .WhereIF(!string.IsNullOrEmpty(sysMenu.menuName), (menu, roleMenu, userRole, role) => menu.menuName.Contains(sysMenu.menuName)) .WhereIF(!string.IsNullOrEmpty(sysMenu.visible), (menu, roleMenu, userRole, role) => menu.visible == sysMenu.visible) .WhereIF(!string.IsNullOrEmpty(sysMenu.status), (menu, roleMenu, userRole, role) => menu.status == sysMenu.status) .OrderBy((menu, roleMenu, userRole, role) => new { menu.parentId, menu.orderNum }) .Select((menu, roleMenu, userRole, role) => menu).ToList(); } #region 左側選單樹 /// <summary> /// 管理員獲取左側選單樹 /// </summary> /// <returns></returns> public List<SysMenu> SelectMenuTreeAll() { var menuTypes = new string[] { "M", "C" }; //hisql方式 return ContextHiSql.HiSql("select * from sys_menu where status = @status and menuType in(@menuType)", new { status = "0", menuType = menuTypes }) .Sort("parentId", "orderNum") .ToList<SysMenu>(); //sqlsugar方式 return Context.Queryable<SysMenu>() .Where(f => f.status == "0" && menuTypes.Contains(f.menuType)) .OrderBy(it => new { it.parentId, it.orderNum }).ToList(); } /// <summary> /// 根據使用者角色獲取左側選單樹 /// </summary> /// <param name="userId"></param> /// <returns></returns> public List<SysMenu> SelectMenuTreeByRoleIds(List<long> roleIds) { var menuTypes = new List<string>() { "M", "C"}; //hisql方式 return ContextHiSql.HiSql(@"select menu.* from sys_menu as menu join sys_role_menu as roleMenu on menu.menuId = roleMenu.Menu_id where roleMenu.Role_id in (@roleIds) and menu.menuType in(@menuType)", new { roleIds = (List<long>)roleIds, menuType = menuTypes }) .Sort("parentId", "orderNum") .ToList<SysMenu>(); //sqlsugar方式 return Context.Queryable<SysMenu, SysRoleMenu>((menu, roleMenu) => new JoinQueryInfos( SqlSugar.JoinType.Left, menu.menuId == roleMenu.Menu_id )) .Where((menu, roleMenu) => roleIds.Contains(((int)roleMenu.Role_id)) && menuTypes.Contains(menu.menuType) && menu.status == "0") .OrderBy((menu, roleMenu) => new { menu.parentId, menu.orderNum }) .Select((menu, roleMenu) => menu).ToList(); } #endregion /// <summary> /// 獲取選單詳情 /// </summary> /// <param name="menuId"></param> /// <returns></returns> public SysMenu SelectMenuById(int menuId) { //hisql方式 return ContextHiSql.HiSql(@"select * from sys_menu where menuId = @menuId ", new { menuId = menuId }) .ToList<SysMenu>().FirstOrDefault(); //sqlsugar方式 return Context.Queryable<SysMenu>().Where(it => it.menuId == menuId).Single(); } /// <summary> /// 新增選單 /// </summary> /// <param name="menu"></param> /// <returns></returns> public int AddMenu(SysMenu menu) { var Db = Context; menu.Create_time = Db.GetDate(); menu.menuId = IDHelper.GetLongId(); // 此處使用雪花ID,其實HiSql自帶相關方法。如 HiSql.Snowflake.NextId(); //hisql方式 return ContextHiSql.Insert("sys_menu", menu).ExecCommand(); //sqlsugar方式 return Db.Insertable(menu).ExecuteCommand(); } /// <summary> /// 編輯選單 /// </summary> /// <param name="menu"></param> /// <returns></returns> public int EditMenu(SysMenu menu) { //hisql方式 return ContextHiSql.Update("sys_menu", menu).ExecCommand(); //sqlsugar方式 return Context.Updateable(menu).ExecuteCommand(); } /// <summary> /// 刪除選單 /// </summary> /// <param name="menuId"></param> /// <returns></returns> public int DeleteMenuById(long menuId) { //hisql方式 return ContextHiSql.Delete("sys_menu").Where(new Filter { { "menuId", OperType.EQ, menuId } }).ExecCommand(); //sqlsugar方式 return Context.Deleteable<SysMenu>().Where(it => it.menuId == menuId).ExecuteCommand(); } /// <summary> /// 選單排序 /// </summary> /// <param name="menuDto">選單Dto</param> /// <returns></returns> public int ChangeSortMenu(MenuDto menuDto) { //hisql方式 return ContextHiSql.Update("sys_menu", new SysMenu() { menuId = menuDto.MenuId, orderNum = menuDto.orderNum }).Only("orderNum").ExecCommand(); //sqlsugar方式 var result = Context.Updateable(new SysMenu() { menuId = menuDto.MenuId, orderNum = menuDto.orderNum }) .UpdateColumns(it => new { it.orderNum }).ExecuteCommand(); return result; } /// <summary> /// 查詢選單許可權 /// </summary> /// <param name="userId"></param> /// <returns></returns> public List<SysMenu> SelectMenuPermsByUserId(long userId) { //var ta = ContextHiSql.Query("sys_role").Field("*").ToList<SysMenu>().FirstOrDefault(); //hisql方式 Filter filters = new Filter(); filters.Add("menu.status", OperType.EQ, 0); filters.Add("role.status", OperType.EQ, 0); filters.Add("userRole.user_id", OperType.EQ, userId); string aa = @"select menu.* from sys_menu as menu join sys_role_menu as roleMenu on menu.menuId = roleMenu.menu_id join sys_user_role as userRole on userRole.Role_id = roleMenu.Role_id join sys_role as role on role.RoleId = userRole.role_id order by menu.parentId, menu.orderNum "; return ContextHiSql.HiSql(@"select menu.* from sys_menu as menu join sys_role_menu as roleMenu on menu.menuId = roleMenu.menu_id join sys_user_role as userRole on userRole.Role_id = roleMenu.Role_id join sys_role as role on role.RoleId = userRole.role_id order by menu.parentId, menu.orderNum ").Where(filters).ToList<SysMenu>(); // //sqlsugar方式 return Context.Queryable<SysMenu, SysRoleMenu, SysUserRole, SysRole>((m, rm, ur, r) => new JoinQueryInfos( SqlSugar.JoinType.Left, m.menuId == rm.Menu_id, SqlSugar.JoinType.Left, rm.Role_id == ur.RoleId, SqlSugar.JoinType.Left, ur.RoleId == r.RoleId )) //.Distinct() .Where((m, rm, ur, r) => m.status == "0" && r.Status == "0" && ur.UserId == userId) .Select((m, rm, ur, r) => m).ToList(); } /// <summary> /// 校驗選單名稱是否唯一 /// </summary> /// <param name="menu"></param> /// <returns></returns> public SysMenu CheckMenuNameUnique(SysMenu menu) { //hisql方式 Filter filters = new Filter(); filters.Add("menuName", OperType.EQ, menu.menuName); filters.Add("parentId", OperType.EQ, menu.parentId); return ContextHiSql.Query("sys_menu").Field("*").Where(filters).ToList<SysMenu>().FirstOrDefault(); //sqlsugar方式 return Context.Queryable<SysMenu>() .Where(it => it.menuName == menu.menuName && it.parentId == menu.parentId).Single(); } /// <summary> /// 是否存在選單子節點 /// </summary> /// <param name="menuId"></param> /// <returns></returns> public int HasChildByMenuId(long menuId) { //hisql方式 Filter filters = new Filter(); filters.Add("parentId", OperType.EQ, menuId); return int.Parse(ContextHiSql.Query("sys_menu").Field("count(*) as Cnt").Where(filters).ToTable().Rows[0][0].ToString()); //sqlsugar方式 return Context.Queryable<SysMenu>().Where(it => it.parentId == menuId).Count(); } #region RoleMenu /// <summary> /// 查詢選單使用數量 /// </summary> /// <param name="menuId"></param> /// <returns></returns> public int CheckMenuExistRole(long menuId) { //hisql方式 Filter filters = new Filter(); filters.Add("Menu_id", OperType.EQ, menuId); return int.Parse(ContextHiSql.Query("sys_role_menu").Field("count(*) as Cnt").Where(filters).ToTable().Rows[0][0].ToString()); //sqlsugar方式 return Context.Queryable<SysRoleMenu>().Where(it => it.Menu_id == menuId).Count(); } #endregion } } 倉儲基礎類別 BaseRepository.cs 程式碼 using H.Cache; using Infrastructure; using Infrastructure.Extensions; using Infrastructure.Model; using SqlSugar; using SqlSugar.IOC; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; using HSMB.Model; using HSMB.Model.System; using HiSql; namespace HSMB.Repository { /// <summary> /// /// </summary> /// <typeparam name="T"></typeparam> public class BaseRepository<T> : IBaseRepository<T> where T : class, new() { public ISqlSugarClient Context; public HiSqlClient ContextHiSql; public ICacheManagerBase cacheManager; public BaseRepository( string configId = "0") { this.cacheManager = AutofacCore.GetFromFac<ICacheManagerBase>(); //hisql方式 this.ContextHiSql = AutofacCore.GetFromFac<HiSqlClient>(); //sqlsugar 方式 Context = DbTransient.Sugar.GetConnection(configId);//根據類傳入的ConfigId自動選擇 Context = DbScoped.SqlSugarScope.GetConnection(configId); } #region add /// <summary> /// 插入指定列使用 /// </summary> /// <param name="parm"></param> /// <param name="iClumns"></param> /// <param name="ignoreNull"></param> /// <returns></returns> public int Add(T parm, Expression<Func<T, object>> iClumns = null, bool ignoreNull = true) { return Context.Insertable(parm).InsertColumns(iClumns).IgnoreColumns(ignoreNullColumn: ignoreNull).ExecuteCommand(); } /// <summary> /// 插入實體 /// </summary> /// <param name="t"></param> /// <param name="IgnoreNullColumn">預設忽略null列</param> /// <returns></returns> public int Add(T t) { return Context.Insertable(t).ExecuteCommand(); } public int Insert(List<T> t) { return Context.Insertable(t).ExecuteCommand(); } public long InsertReturnBigIdentity(T t) { return Context.Insertable(t).ExecuteReturnBigIdentity(); } #endregion add #region update /// <summary> /// /// </summary> /// <param name="entity"></param> /// <param name="list"></param> /// <param name="isNull">預設為true</param> /// <returns></returns> public bool Update(T entity, List<string> list = null, bool isNull = true) { if (list == null) { list = new List<string>() { "Create_By", "Create_time" }; } return Context.Updateable(entity).IgnoreColumns(isNull).IgnoreColumns(list.ToArray()).ExecuteCommand() > 0; } public bool Update(Expression<Func<T, bool>> where, Expression<Func<T, T>> columns) { return Context.Updateable<T>().SetColumns(columns).Where(where).RemoveDataCache().ExecuteCommand() > 0; } #endregion update public DbResult<bool> UseTran(Action action) { var result = Context.Ado.UseTran(() => action()); return result; } public DbResult<bool> UseTran(SqlSugarClient client, Action action) { var result = client.Ado.UseTran(() => action()); return result; } public bool UseTran2(Action action) { var result = Context.Ado.UseTran(() => action()); return result.IsSuccess; } #region delete /// <summary> /// 刪除表示式 /// </summary> /// <param name="expression"></param> /// <returns></returns> public int Delete(Expression<Func<T, bool>> expression) { return Context.Deleteable<T>().Where(expression).ExecuteCommand(); } /// <summary> /// 批次刪除 /// </summary> /// <param name="obj"></param> /// <returns></returns> public int Delete(object[] obj) { return Context.Deleteable<T>().In(obj).ExecuteCommand(); } public int Delete(object id) { return Context.Deleteable<T>(id).ExecuteCommand(); } public bool DeleteTable() { return Context.Deleteable<T>().ExecuteCommand() > 0; } #endregion delete #region query public bool Any(Expression<Func<T, bool>> expression) { return Context.Queryable<T>().Where(expression).Any(); } public ISugarQueryable<T> Queryable() { return Context.Queryable<T>(); } public List<T> GetList(Expression<Func<T, bool>> expression) { return Context.Queryable<T>().Where(expression).ToList(); } public Task<List<T>> GetListAsync(Expression<Func<T, bool>> expression) { return Context.Queryable<T>().Where(expression).ToListAsync(); } public List<T> SqlQueryToList(string sql, object obj = null) { return Context.Ado.SqlQuery<T>(sql, obj); } /// <summary> /// 獲得一條資料 /// </summary> /// <param name="where">Expression<Func<T, bool>></param> /// <returns></returns> public T GetFirst(Expression<Func<T, bool>> where) { return Context.Queryable<T>().Where(where).First(); } /// <summary> /// 根據主值查詢單條資料 /// </summary> /// <param name="pkValue">主鍵值</param> /// <returns>泛型實體</returns> public T GetId(object pkValue) { return Context.Queryable<T>().InSingle(pkValue); } /// <summary> /// 根據條件查詢分頁資料 /// </summary> /// <param name="where"></param> /// <param name="parm"></param> /// <returns></returns> public PagedInfo<T> GetPages(Expression<Func<T, bool>> where, PagerInfo parm) { var source = Context.Queryable<T>().Where(where); return source.ToPage(parm); } public PagedInfo<T> GetPages(Expression<Func<T, bool>> where, PagerInfo parm, Expression<Func<T, object>> order, string orderEnum = "Asc") { var source = Context.Queryable<T>().Where(where).OrderByIF(orderEnum == "Asc", order, OrderByType.Asc).OrderByIF(orderEnum == "Desc", order, OrderByType.Desc); return source.ToPage(parm); } /// <summary> /// 查詢所有資料(無分頁,請慎用) /// </summary> /// <returns></returns> public virtual List<T> GetAll(bool useCache = false, int cacheSecond = 3600) { if (useCache) { var cacheData = this.cacheManager.Get<List<T>>(typeof(T).FullName, (ct) => { var data = Context.Queryable<T>().ToList(); return data; }, TimeSpan.FromSeconds(cacheSecond)); if (typeof(SysUser).FullName == typeof(T).FullName) { } return cacheData; } return Context.Queryable<T>().WithCacheIF(useCache, cacheSecond).ToList(); } public int Count(Expression<Func<T, bool>> where) { return Context.Queryable<T>().Count(where); } #endregion query /// <summary> /// 此方法不帶output返回值 /// var list = new List<SugarParameter>(); /// list.Add(new SugarParameter(ParaName, ParaValue)); input /// </summary> /// <param name="procedureName"></param> /// <param name="parameters"></param> /// <returns></returns> public DataTable UseStoredProcedureToDataTable(string procedureName, List<SugarParameter> parameters) { return Context.Ado.UseStoredProcedure().GetDataTable(procedureName, parameters); } public DataSet UseStoredProcedureToDataSet(string procedureName, List<SugarParameter> parameters) { var dataResult = new DataSet(); string sql = $"exec {procedureName} "; foreach (var key in parameters) { if (!key.Value.IsEmpty()) { sql = sql + (sql.IndexOf("@") > -1 ? ", " : " ") + $" {key.ParameterName} = {key.ParameterName}"; } } return Context.Ado.GetDataSetAll(sql, parameters); return Context.Ado.UseStoredProcedure().GetDataSetAll(procedureName, parameters); } public int ExecSql(string sql) { return Context.Ado.ExecuteCommand(sql,new List<SugarParameter>()); } /// <summary> /// 帶output返回值 /// var list = new List<SugarParameter>(); /// list.Add(new SugarParameter(ParaName, ParaValue, true)); output /// list.Add(new SugarParameter(ParaName, ParaValue)); input /// </summary> /// <param name="procedureName"></param> /// <param name="parameters"></param> /// <returns></returns> public (DataTable, List<SugarParameter>) UseStoredProcedureToTuple(string procedureName, List<SugarParameter> parameters) { var result = (Context.Ado.UseStoredProcedure().GetDataTable(procedureName, parameters), parameters); return result; } public DataTable QueryableToDataTable(PagerInfo pager) { int TotalPageNum = 0; int TotalNum = 0; List<SugarParameter> parameters = new List<SugarParameter>(); string sqlWhere = buildSearchFilter(pager, out parameters); var query = Context.SqlQueryable<object>($"select * from {pager.TableName}").Where(sqlWhere).AddParameters(parameters); if (pager.OrderBy.IsNotEmpty()) { query = query.OrderBy(pager.OrderBy); } var table = query.ToDataTablePage(pager.PageNum, pager.PageSize, ref TotalPageNum, ref TotalNum); pager.TotalPageNum = TotalPageNum; pager.TotalNum = TotalNum; return table; } public PagedInfo QueryableToDataTablePage(PagerInfo pager) { var table = QueryableToDataTable(pager); PagedInfo pagedInfo = new PagedInfo(); pagedInfo.PageIndex = pager.PageNum; pagedInfo.PageSize = pager.PageSize; pagedInfo.TotalPage = pager.TotalNum; pagedInfo.TotalCount = pager.TotalPageNum; pagedInfo.Result = table; // Enumerable.ToList< DataRow >(table); return pagedInfo; } private string buildSearchFilter(PagerInfo pager, out List<SugarParameter> parameters) { parameters = new List<SugarParameter>(); if (pager.QueryConditions == null || pager.QueryConditions.Count() == 0) { return pager.Where; } StringBuilder sqlWhere = new StringBuilder(pager.QueryConditions.Count() + 1); sqlWhere.Append(" 1 = 1 "); int i = 0; foreach (PageQueryCondition pageQuery in pager.QueryConditions) { i++; string field = pageQuery.FieldName; var _value = pageQuery.Values; string startValue = null; if (_value != null) { startValue = _value.ElementAtOrDefault(0); } if(startValue == null) continue; if (string.IsNullOrEmpty(startValue) && (pageQuery.Mode != QueryConditionMode.Equal && pageQuery.Mode != QueryConditionMode.NotEqual && pageQuery.Mode != QueryConditionMode.Between && pageQuery.Mode != QueryConditionMode.BetweenAndDate)) continue; if (!string.IsNullOrEmpty(startValue)) { startValue = startValue.Replace("'", "''"); } switch (pageQuery.Mode) { case QueryConditionMode.In: { for (int q = 0; q < _value.Count; q++) { _value[q] = _value[q].Replace("'", "''"); } sqlWhere.Append(string.Format(" and [{0}] in ('"+ string.Join("','", _value) + "')", field, field + i.ToString())); break; } case QueryConditionMode.Equal: { if (startValue == null) { sqlWhere.Append(string.Format(" and [{0}] is null", field)); break; } else { sqlWhere.Append(string.Format(" and [{0}]=@{1}", field, field + i.ToString())); parameters.Add(new SugarParameter(field + i.ToString(), startValue)); break; } } case QueryConditionMode.NotEqual: { if (startValue == null) { sqlWhere.Append(string.Format(" and [{0}] is not null", field)); break; } else { sqlWhere.Append(string.Format(" and [{0}] <> @{1}", field, field + i.ToString())); parameters.Add(new SugarParameter(field + i.ToString(), startValue)); break; } } case QueryConditionMode.Greater: { sqlWhere.Append(string.Format(" and [{0}]>@{1}", field, field + i.ToString())); parameters.Add(new SugarParameter(field + i.ToString(), startValue)); break; } case QueryConditionMode.GreaterEqual: { sqlWhere.Append(string.Format(" and [{0}]>=@{1}", field, field + i.ToString())); parameters.Add(new SugarParameter(field + i.ToString(), startValue)); break; } case QueryConditionMode.Less: { sqlWhere.Append(string.Format(" and [{0}]<@{1}", field, field + i.ToString())); parameters.Add(new SugarParameter(field + i.ToString(), startValue)); break; } case QueryConditionMode.LessEqual: { sqlWhere.Append(string.Format(" and [{0}]<=@{1}", field, field + i.ToString())); parameters.Add(new SugarParameter(field + i.ToString(), startValue)); break; } case QueryConditionMode.Like: { sqlWhere.Append(string.Format(" and CHARINDEX(@{1},[{0}])>0 ", field, field + i.ToString())); parameters.Add(new SugarParameter(field + i.ToString(), startValue)); break; } case QueryConditionMode.Between: { var endValue = pageQuery.Values.ElementAtOrDefault(1); if (string.IsNullOrEmpty(startValue) && string.IsNullOrEmpty(endValue)) break; endValue = endValue.Replace("'", "''"); dataType(startValue, endValue); sqlWhere.Append(string.Format(" and ([{0}] between @{1}1 and @{2}2) ", field, field + i.ToString(), field + i.ToString())); parameters.Add(new SugarParameter(string.Format("@{0}1", field + i.ToString()), startValue)); parameters.Add(new SugarParameter(string.Format("@{0}2", field + i.ToString()), endValue)); break; } case QueryConditionMode.BetweenAndDate: { var endValue = pageQuery.Values.ElementAtOrDefault(1); if (endValue == null) endValue = ""; if (!startValue.IsEmpty() && startValue.IndexOf(" - ") > -1) { string splitStr = " - "; string _startValue = startValue; startValue = _startValue.Substring(0, _startValue.IndexOf(splitStr)); endValue = _startValue.Substring(_startValue.IndexOf(splitStr) + splitStr.Length); } if (string.IsNullOrEmpty(startValue) && string.IsNullOrEmpty(endValue)) break; endValue = endValue.Replace("'", "''"); DateTime outDateTime; if (DateTime.TryParse(startValue, out outDateTime)) { startValue = outDateTime.ToString("yyyy-MM-dd 00:00:00"); } else { startValue = "1900-01-01 00:00:00"; } if (DateTime.TryParse(endValue, out outDateTime)) { endValue = outDateTime.ToString("yyyy-MM-dd 23:59:59"); } else { endValue = "2099-01-01 23:59:59"; } sqlWhere.Append(string.Format(" and ([{0}] between @{1}1 and @{2}2) ", field, field + i.ToString(), field + i.ToString())); parameters.Add(new SugarParameter(string.Format("@{0}1", field + i.ToString()), startValue)); parameters.Add(new SugarParameter(string.Format("@{0}2", field + i.ToString()), endValue)); break; } } } return pager.Where.IsEmpty()? sqlWhere.ToString():pager.Where+ " and "+ sqlWhere.ToString(); } /// <summary> /// 判斷值的資料型別 /// </summary> /// <returns></returns> private void dataType(string startValue, string endValue) { DateTime outDateTime; if (DateTime.TryParse(startValue, out outDateTime) || DateTime.TryParse(endValue, out outDateTime)) { startValue = string.IsNullOrEmpty(startValue) ? "1900-01-01 00:00:00" : startValue; endValue = string.IsNullOrEmpty(startValue) ? "2050-01-01 23:59:59" : startValue; } double outi = 0; if (double.TryParse(startValue, out outi) || double.TryParse(endValue, out outi)) { startValue = string.IsNullOrEmpty(startValue) ? int.MinValue.ToString() : startValue; endValue = string.IsNullOrEmpty(startValue) ? int.MinValue.ToString() : startValue; } } } public static class QueryableExtension { /// <summary> /// 讀取列表 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="source"></param> /// <param name="parm"></param> /// <returns></returns> public static PagedInfo<T> ToPage<T>(this ISugarQueryable<T> source, PagerInfo parm) { var page = new PagedInfo<T>(); var total = source.Count(); page.TotalCount = total; page.PageSize = parm.PageSize; page.PageIndex = parm.PageNum; page.Result = source.ToPageList(parm.PageNum, parm.PageSize); return page; } public static PagedInfo<DataTable> ToPageDataTable<T>(this ISugarQueryable<T> source, PagerInfo parm) { var page = new PagedInfo<DataTable>(); var total = source.Count(); page.TotalCount = total; page.PageSize = parm.PageSize; page.PageIndex = parm.PageNum; page.DataTable = source.ToDataTablePage(parm.PageNum, parm.PageSize); return page; } } }
到此,選單管理模組通過hisql完成了 選單的新增、編輯、刪除、檢視詳情。
到此這篇關於.NET使用Hisql實現選單管理的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45