共享自定义函数 返回

精华
4 159

你们有好的Sqlfunc自义函数可以在下面贴子中发出来,不允许水贴

热忱回答4

  • 分页排序扩展

    public class InPageModel
        {
            /// <summary>
            /// 第幾頁
            /// </summary>
            public int page { get; set; }
            /// <summary>
            /// 這一頁需要獲取多少條數據
            /// </summary>
            public int limit { get; set; }
            /// <summary>
            /// 排序字段
            /// </summary>
            [DefaultValue("")]
            public string field { get; set; }
            /// <summary>
            /// 排序方式 , desc , asc , ""
            /// </summary>
            [DefaultValue("")]
            public string order { get; set; }
    
            public PageModel returnPageModel { get; set; }
    
            public InPageModel()
            {
                returnPageModel = new PageModel();
            }
    
            public PageModel GetPageModel()
            {
                returnPageModel = new PageModel();
                returnPageModel.PageIndex = page;
                returnPageModel.PageSize = limit;
                return returnPageModel;
            }
        }
     public static async Task<List<T>> MyToPageListAsync<T>(this ISugarQueryable<T> iSugarQueryable, InPageModel inPageModel) where T : class
            {
                switch (inPageModel.order)
                {
                    case "desc":
                        iSugarQueryable = iSugarQueryable.OrderBy(inPageModel.field + " desc ");
                        break;
                    case "asc":
                        iSugarQueryable = iSugarQueryable.OrderBy(inPageModel.field + " asc ");
                        break;
                    default:
                        break;
                }
                var rezultList = await iSugarQueryable.ToPageListAsync(inPageModel.page, inPageModel.limit);
    
                inPageModel.returnPageModel.PageCount = iSugarQueryable.Count();
    
                return rezultList;
            }

    留个爪印 , 顺带问一下 , 还有 3.0 的文档吗 ? 我还有项目在用 

    0 回复
  • 使用指定的索引查询

    public static List<T> SqlQueryIndex<T>(this ISugarQueryable<T> queryable, SqlSugarClient dbObj, string indexString)
            {
    
                string inStringSql = $"force index({indexString}) ";
    
                string sqlString = queryable.ToSql().Key;
    
                string sqlResult = sqlString.Insert(sqlString.IndexOf("WHERE ("), String.Format(inStringSql, inStringSql));
    
                //重新構建對應的參數
                Dictionary<string, object> inObj = new Dictionary<string, object>();
                foreach (var item in queryable.ToSql().Value)
                {
                    inObj.Add(item.ParameterName, item.Value);
                }
    
                return dbObj.Ado.SqlQuery<T>(sqlResult, inObj);
            }


    0 回复
  • WhereIF , 封装的扩展

    /// <summary>
            /// 拼接OR寫法 , 生成語句 and (id =1 OR id=2 OR id=3 .....) 具體類型由 fieldName決定
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <typeparam name="F"></typeparam>
            /// <param name="sugarQueryable"></param>
            /// <param name="isWhere"></param>
            /// <param name="inList"></param>
            /// <param name="fieldName"></param>
            /// <param name="conditionalType">
            /// Equal = 0,
            /// Like = 1,
            /// GreaterThan = 2,
            /// GreaterThanOrEqual = 3,
            /// LessThan = 4,
            /// LessThanOrEqual = 5,
            /// In = 6,
            /// NotIn = 7,
            /// LikeLeft = 8,
            /// LikeRight = 9,
            /// NoEqual = 10,
            /// IsNullOrEmpty = 11,
            /// IsNot = 12,
            /// NoLike = 13
            ///</param>
            /// <returns></returns>
            public static ISugarQueryable<T> WhereIF<T, F>(this ISugarQueryable<T> sugarQueryable, bool isWhere, string fieldName, List<F> inList, ConditionalType conditionalType)
            {
                if (isWhere)
                {
                    List<IConditionalModel> conModels = new List<IConditionalModel>();
    
                    //生成語句 and (id =1 OR id=2 OR id=3 .....)
                    List<KeyValuePair<WhereType, SqlSugar.ConditionalModel>> andOrList = new List<KeyValuePair<WhereType, ConditionalModel>>();
    
                    foreach (var item in inList)
                    {
                        string fieldValue = item is Enum ? Convert.ToInt32(item).ToString() : item.ObjToString();
                        andOrList.Add(new KeyValuePair<WhereType, ConditionalModel>
                        (WhereType.Or,
                            new ConditionalModel()
                            {
                                FieldName = fieldName,
                                ConditionalType = conditionalType,
                                FieldValue = fieldValue
                            }));
                        ;
    
                    }
                    conModels.Add(new ConditionalCollections { ConditionalList = andOrList });
    
                    sugarQueryable = sugarQueryable.Where(conModels);
                }
                return sugarQueryable;
            }

    具体是OR写法 , 还是And写法大家自己修改吧 .

    想问问还有没有3.0的文档啊 ? 我有旧项目在用啊. 

    0 回复
  • 再补充一些DDD设计模式的基层接口在这里吧

    /// <summary>
        /// 查询接口
        /// </summary>
        /// <typeparam name="I"></typeparam>
        /// <typeparam name="S"></typeparam>
        /// <typeparam name="R"></typeparam>
        public interface IBaseGetTableMethod<S, R>
        {
            /// <summary>
            /// 得到列表
            /// </summary>
            /// <param name="inModel"></param>
            /// <returns></returns>
            Task<List<R>> GetListTask(S inModel);
    
            /// <summary>
            /// 得到Model
            /// </summary>
            /// <param name="inModel"></param>
            /// <returns></returns>
            Task<R> GetModelTask(S inModel);
    
        }
    /// <summary>
        /// 查询接口
        /// </summary>
        /// <typeparam name="I"></typeparam>
        /// <typeparam name="S"></typeparam>
        /// <typeparam name="R"></typeparam>
        public interface IBaseGetTableMethodExpression<I, R>
        {
            /// <summary>
            /// 根據表達式獲取List
            /// </summary>
            /// <param name="whereExpression"></param>
            /// <returns></returns>
            Task<List<R>> GetListTask(Expression<Func<I, bool>> whereExpression);
    
            /// <summary>
            /// 根據表達式獲取Model
            /// </summary>
            /// <param name="whereExpression"></param>
            /// <returns></returns>
            Task<R> GetModelTask(Expression<Func<I, bool>> whereExpression);
    
    
        }
    public interface IBaseInsertUpdateMethod<R>
        {
            /// <summary>
            /// 批量更新
            /// </summary>
            /// <param name="inList"></param>
            /// <returns></returns>
            Task<bool> InsertUpdateListTask(List<R> inList);
            /// <summary>
            /// 單獨更新
            /// </summary>
            /// <param name="inModel"></param>
            /// <returns></returns>
            Task<bool> InsertUpdateModelTask(R inModel);
        }
    /// <summary>
        /// 更新指定的列
        /// </summary>
        /// <typeparam name="I"></typeparam>
        /// <typeparam name="R"></typeparam>
        public interface IBaseUpdateUpdateColumnsMethod<I, R>
        {
            /// <summary>
            /// 批量更新 更新指定的列
            /// </summary>
            /// <param name="inList"></param>
            /// <param name="columns">指定更新列</param>
            /// <returns></returns>
            Task<bool> UpdateListColumnsTask(List<R> inList, Expression<Func<I, object>> UpdateColumns);
            /// <summary>
            /// 單獨更新 更新指定的列
            /// </summary>
            /// <param name="inModel"></param>
            /// <param name="columns">指定更新列</param>
            /// <returns></returns>
            Task<bool> UpdateModelColumnsTask(R inModel, Expression<Func<I, object>> UpdateColumns);
        }
    /// <summary>
        /// 忽略更新列
        /// </summary>
        public interface IBaseUpdateUpdateIgnoryColumnsMethod<I, R>
        {
            /// <summary>
            /// 批量更新 忽略更新列
            /// </summary>
            /// <param name="inList"></param>
            /// <param name="columns">指定更新列</param>
            /// <returns></returns>
            Task<bool> UpdateListIgnoryColumnsTask(List<R> inList, Expression<Func<I, object>> UpdateIgnoreColumns);
            /// <summary>
            /// 單獨更新 忽略更新列
            /// </summary>
            /// <param name="inModel"></param>
            /// <param name="columns">指定更新列</param>
            /// <returns></returns>
            Task<bool> UpdateModelIgnoryColumnsTask(R inModel, Expression<Func<I, object>> UpdateIgnoreColumns);
        }

    基层方法解释:

    I : 数据库Model

    S : 查询参数Model

    R : 返回的参数Model

    具体的3个Model的转换 , 大家可以使用自己的mapping DLL处理. (我用的AutoMapping)

    分离Model后 , 才能保证ORM的高效工作 . 而不应该直接使用 Sugar的那种 Mapping方式. 

    0 回复

版块

学习文档

最新会员

发布达人

回贴达人