使用说明

使用说明

  1. 在后台 [表Service.cs]Partial 文件夹下的分部类)中重写对应方法,将 [当前表] 改为实际主表实体名。

主表查询

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

/// <summary>
/// 主表查询
/// </summary>
/// <param name="options"></param>
/// <returns></returns>
public override PageGridData<当前表> 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 必须返回与实体类一样的字段,字段不能少********/
    //sql注意sql注入的问题
    /*  
             *  string date = DateTime.Now.AddYears(-10).ToString("yyyy-MM-dd");
                QuerySql = $@"select 字段1,字段2,... from SellOrder  
                                       where createdate>'{date}'
                                           and  Order_Id in (select Order_Id from 明细表)
                                           and CreateID={UserContext.Current.UserId}";
    */
    

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

        //或者直接写查询条件
        //queryable=queryable.Where(x=>条件)

        //明细表一起查询返回
        //queryable=queryable.Include(x=>x.明细表);
        //sugar后台改为queryable=queryable.Includes(x=>x.明细表);

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

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

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

主表查询(异步async)

异步启用说明

  1. 代码生成器勾选[异步接口]后此方法才会执行,默认执行的是上面同步方法
  2. 内容较多,按需实现里面的功能

/// <summary>
/// 主表查询异步
/// </summary>
/// <param name="options"></param>
/// <returns></returns>
public override async Task<PageGridData<当前表>> GetPageDataAsync(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 必须返回与实体类一样的字段,字段不能少********/
    //sql注意sql注入的问题
    /*  
             *  string date = DateTime.Now.AddYears(-10).ToString("yyyy-MM-dd");
                QuerySql = $@"select 字段1,字段2,... from SellOrder  
                                       where createdate>'{date}'
                                           and  Order_Id in (select Order_Id from 明细表)
                                           and CreateID={UserContext.Current.UserId}";
    */


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

        //或者直接写查询条件
        //queryable=queryable.Where(x=>条件)

        //明细表一起查询返回
        //queryable=queryable.Include(x=>x.明细表);
        //sugar后台改为queryable=queryable.Includes(x=>x.明细表);

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

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

    //查询结果,在返回页面前可对查询的数据进行操作
    GetPageDataOnExecuted = (PageGridData<当前表> grid) =>
    {
        //可对查询的结果的数据操作
        List<当前表> sellOrders = grid.rows;
    };

    //查询结果异步
    GetPageDataOnExecutedAsync = async (PageGridData<当前表> grid) =>
    {
        //await xxx异步操作
        //可对查询的结果的数据操作
        List<当前表> sellOrders = grid.rows;
    };

    var res = await base.GetPageDataAsync(options);
    //这里可以自定义返回内容,前端searchAfter(rows,res)的第二个参数获取返回的数据
    //res.extra = new { 自定义值=123};
    return res;
}

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

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

   //查询(主表合计)
    public override PageGridData<当前表> GetPageData(PageDataOptions options)
    {
        //EF:查询table界面显示合计(需要与前端开发文档上的【table显示合计】一起使用)
        //注意:如果使用了异步接口,将SummaryExpress应该放在异步GetPageDataAsync方法中
        SummaryExpress = (IQueryable<当前表> queryable) =>
        {
            return queryable.GroupBy(x => 1).Select(x => new
            {
                //AvgPrice注意大小写和数据库字段大小写一样
                Qty = x.Sum(o => o.Qty).ToString("f2")
            })
            .FirstOrDefault();
        };
        return base.GetPageData(options);
    }

主表合计SqlSugar

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

   //查询(主表合计)
    public override PageGridData<当前表> GetPageData(PageDataOptions options)
    {

        //sqlsugar:查询table界面显示合计(需要与前端开发文档上的【table显示合计】一起使用)
        //注意:如果使用了异步接口,将SummaryExpress应该放在异步GetPageDataAsync方法中
        SummaryExpress = (ISugarQueryable<当前表> 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

    //在业务表service类,实现GetPageData方法输出sql,见上面GetPageData方法查看sql示例
    //EF
    Console.Write(queryable.ToQueryString())
    //sqlsugar
    Console.Write( queryable.ToSqlString())

    //EF版输出所有操作执行的sql
    将BaseDbContext.cs类这段代码取消注释:
    optionsBuilder.AddInterceptors(new SqlCommandInterceptor());

Last Updated 2026/5/12 17:18:25