首页 > 代码库 > 实现查询与存储过程编译转换
实现查询与存储过程编译转换
使用标准查询可方便将查询编译为存储过程,以后再查询时会匹配对应的存储过程进行调用
方法原型
1 /// <summary> 2 /// 使用lamada设置条件查询 3 /// </summary> 4 /// <typeparam name="TItem"></typeparam> 5 /// <param name="expression"></param> 6 /// <param name="compileSp">是否编译成储过程</param> 7 /// <returns></returns> 8 public List<TItem> QueryList<TItem>(Expression<Func<TItem, bool>> expression =null, bool compileSp = false) where TItem : IModelBase, new() 9 {10 LamadaQuery<TItem> query = new LamadaQuery<TItem>();11 query = query.Select(b => b.SelectField()).Where(expression);12 string key;13 return QueryList<TItem>(query, 0, out key, compileSp);14 }
调用:
public List<ProductReceiptDetail> QueryDetail(string batchNo) { var helper = dbHelper; var list = helper.QueryList<ProductReceiptDetail>(b => b.BatchNo == batchNo,compileSp:true); return list; }
编译转换后的存储过程类似如下:
1 CREATE PROCEDURE [dbo].ZautoSp_1114C09A54B9CFAF2 (@0AccountId nvarchar(500),@1TradeType nvarchar(500),@3Hash nvarchar(500))3 AS4 set nocount on5 select top 1 t1.AccountId,t1.AddTime,t1.Amount,t1.CurrentBalance,t1.Hash,t1.Id,t1.LastBalance,t1.Name,t1.OperateType,t1.OutOrderId,t1.Remark,t1.TradeType,t1.TransactionNo,t1.TransactionType from [AccountTransaction] as t1 with (nolock) where (((t1.AccountId=@0AccountId) AND (t1.TradeType=@1TradeType)) AND (t1.Hash=@3Hash)) order by t1.Id desc
当然也可以用原生SQL直接转换:
public List<dynamic> GetSum(int storeId) { var helper = dbHelper; string sql = "select sum(TotalNum) Num,sum(OrderAmount) Amount,datepart(month,AddTime) Month from OrderMain where AddTime between dateadd(month,datediff(month,-1,getdate())-7,-1) and dateadd(month,datediff(month,-1,getdate())-1,-1) and OwnerId = @storeId and [Status] = @status group by datepart(month,AddTime) "; helper.AddParam("storeId", storeId); helper.AddParam("Status", OrderStatus.已确认收货); return helper.AutoSpQueryDynamic(sql); }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。