search主表查询、主表合计、查看实际执行sql

search主表查询

内容较多,按需实现里面的功能

  //查询,将下面的SellOrder改为你的表名
    public override PageGridData<SellOrder> GetPageData(PageDataOptions options)
    {
        //options.Value可以从前台查询的方法提交一些其他参数放到value里面
        //前端提交方式,见文档:[生成页面文档->searchBefore方法]
        object extraValue = options.Value;

        //此处是从前台提交的原生的查询条件,这里可以自己过滤
        string 字段 = "";
        QueryRelativeList = (List<SearchParameters> parameters) =>
        {
            foreach (var item in parameters)
            {
                //如果需要取出某个查询值,并单独使用
                if (item.Name=="字段")
                {
                    字段 = item.Value;
                    //清空字段值后框架不会使用此字段
                    item.Value = null;
                }  
            }
        };

        //设置原生查询的sql语句,这里必须返回select * 表所有字段
        //(先内部过滤数据,内部调用EF方法FromSqlRaw,自己写的sql注意sql注入的问题),不会影响界面上提交的查询
        /*  
         *  string date = DateTime.Now.AddYears(-10).ToString("yyyy-MM-dd");
            QuerySql = $@"select * from SellOrder  
                                   where createdate>'{date}'
                                       and  Order_Id in (select Order_Id from SellOrderList)
                                       and CreateID={UserContext.Current.UserId}";
        */

        //此处与上面QuerySql只需要实现其中一个就可以了
        //查询前可以自已设定查询表达式的条件

        //sqlsugar后台将IQueryable改为ISugarQueryable
        QueryRelativeExpression = (IQueryable<SellOrder> queryable) =>
        {
            //当前用户只能操作自己(与下级角色)创建的数据,如:查询、删除、修改等操作
            //IQueryable<int> userQuery = RoleContext.GetCurrentAllChildUser();
            //queryable = queryable.Where(x => x.CreateID == UserContext.Current.UserId || userQuery.Contains(x.CreateID ?? 0));
        
           //或者直接写查询条件
           //queryable=queryable.Where(x=>条件)

           //查看生成的sql语句:Console.Write(queryable.ToQueryString())
            return queryable;
        };

        //指定多个字段进行排序
        OrderByExpression = x => new Dictionary<object, QueryOrderBy>() {
            { x.CreateDate,QueryOrderBy.Desc },
            { x.SellNo,QueryOrderBy.Asc}
        };

        //int a = 1;
        //按条件指定多个字段按条件进行排序
        //OrderByExpression = x => new Dictionary<object, QueryOrderBy>() {
        //    { x.CreateDate,QueryOrderBy.Desc },
        //    { x.SellNo,a==1?QueryOrderBy.Desc:QueryOrderBy.Asc}
        //};

        //查询完成后,在返回页面前可对查询的数据进行操作
        GetPageDataOnExecuted = (PageGridData<SellOrder> grid) =>
        {
            //可对查询的结果的数据操作
            List<SellOrder> sellOrders = grid.rows;
        };
        var res= base.GetPageData(options);
        //这里可以自定义返回内容,前端searchAfter(rows,res)的第二个参数获取返回的数据
        //res.extra = new { 自定义值=123};
        return res;
    }

主表合计(表格显示合计)

(需要与前端开发文档上的【table显示合计】一起使用)

   //查询(主表合计)
    public override PageGridData<SellOrder> GetPageData(PageDataOptions options)
    {
        //EF:查询table界面显示合计(需要与前端开发文档上的【table显示合计】一起使用)
        SummaryExpress = (IQueryable<SellOrder> queryable) =>
        {
            return queryable.GroupBy(x => 1).Select(x => new
            {
                //AvgPrice注意大小写和数据库字段大小写一样
                Qty = x.Sum(o => o.Qty).ToString("f2")
            })
            .FirstOrDefault();
        };
        ////sqlsugar:查询table界面显示合计(需要与前端开发文档上的【table显示合计】一起使用)
        // SummaryExpress = (ISugarQueryable<SellOrder> queryable) =>
        // {
        //     return queryable.Select(x => new 
        //     {
        //         FundsSum = SqlFunc.AggregateSum(x.FundsSum),
        //         HasPayedSum = SqlFunc.AggregateSum(x.HasPayedSum),
        //         NeedPaySum = SqlFunc.AggregateSum(x.NeedPaySum),
        //         Items = SqlFunc.AggregateSum(x.Items)
        //     })
        //     .FirstOrDefault();
        // };
        return base.GetPageData(options);
    }

查看实际执行的sql

    //EF
    Console.Write(queryable.ToQueryString())
    //sqlsugar
    Console.Write( queryable.ToSqlString())

    //EF版输出所有操作执行的sql
    //BaseDbContext.cs中optionsBuilder.AddInterceptors(new SqlCommandInterceptor());注释取消

Last Updated 2025/4/15 14:51:28