明细表查询、明细表合计

使用说明

使用说明

  1. 明细表相关逻辑写在 主表[表Service.cs] 中。
  2. 下方 行内备注Demo_OrderService.cs 保持一致(类型名用 当前表 / 当前表明细 占位)。

自定义明细表查询

/// <summary>
/// 明细表查询
/// </summary>
/// <param name="pageData"></param>
/// <returns></returns>
public override object GetDetailPage(PageDataOptions pageData)
{
    //一对多明细表,可以判断pageData.TableName是查询哪张明细表
    //自定义查询胆细表

    /*********明细表自定义查询方式一:EF *********/
    //var query = 明细表Repository.Instance.IQueryablePage<明细表>(
    //     pageData.Page,
    //     pageData.Rows,
    //     out int count,
    //     x => x.Order_Id == pageData.Value.GetGuid(),
    //      orderBy: x => new Dictionary<object, QueryOrderBy>() { { x.CreateDate, QueryOrderBy.Desc } }
    //    );
    //PageGridData<明细表> detailGrid = new PageGridData<明细表>();
    //detailGrid.rows = query.ToList();
    //detailGrid.total = count;
    //return detailGrid;

    /**********明细表自定义查询方式二:dapper*********/
    //PageGridData<明细表> detailGrid = new PageGridData<明细表>();
    //string sql = "select count(1) from 明细表 where Order_Id=@orderId";
    //detailGrid.total = repository.DapperContext.ExecuteScalar(sql, new { orderId = pageData.Value }).GetInt();

    //sql = @$"select * from (
    //              select *,ROW_NUMBER()over(order by createdate desc) as rowId
    //           from 明细表 where Order_Id=@orderId
    //        ) as s where s.rowId between {((pageData.Page - 1) * pageData.Rows + 1)} and {pageData.Page * pageData.Rows} ";
    //detailGrid.rows = repository.DapperContext.QueryList<明细表>(sql, new { orderId = pageData.Value });

    //return detailGrid;
    return base.GetDetailPage(pageData);
}

明细表查询(异步 async)

/// <summary>
/// 明细表查询异步
/// </summary>
/// <param name="pageData"></param>
/// <returns></returns>
public override async Task<object> GetDetailPageAsync(PageDataOptions pageData)
{
    //与上面同步执行同相
    return await base.GetDetailPageAsync(pageData);
}

明细表查询自定义过滤条件

/// <summary>
/// 明细表查询自定义过滤条件
/// </summary>
/// <typeparam name="Detail"></typeparam>
/// <param name="queryable"></param>
/// <param name="searchParametersList"></param>
/// <returns></returns>
public override IQueryable<Detail> DetailQuery<Detail>(IQueryable<Detail> queryable, List<SearchParameters> searchParametersList)
{
    var detailQuery = queryable as IQueryable<当前表明细>;
    //设置明细表过滤条件
    detailQuery = detailQuery.Where(x => true);

    return detailQuery as IQueryable<Detail>;
}

明细表合计(EF)

明细表合计需配置前端,完整说明见:table 表格显示合计、明细表合计

/// <summary>
/// 设置弹出框明细表的合计信息
/// </summary>
/// <typeparam name="detail"></typeparam>
/// <param name="queryeable"></param>
/// <returns></returns>
protected override object GetDetailSummary<Detail>(IQueryable<Detail> queryeable)
{
    return (queryeable as IQueryable<当前表明细>).GroupBy(x => 1).Select(x => new
    {
        //Weight/Qty注意大小写和数据库字段大小写一样
        Price = x.Average(o => o.Price),
        Qty = x.Sum(o => o.Qty)
    }).FirstOrDefault();
}

明细表异步合计

/// <summary>
/// 明细表异步合计
/// </summary>
/// <typeparam name="Detail"></typeparam>
/// <param name="queryeable"></param>
/// <returns></returns>
public override async Task<object> GetDetailSummaryDataAsync<Detail>(IQueryable<Detail> queryeable)
{
    return await (queryeable as IQueryable<当前表明细>).GroupBy(x => 1).Select(x => new
    {
        //Weight/Qty注意大小写和数据库字段大小写一样
        Price = x.Average(o => o.Price),
        Qty = x.Sum(o => o.Qty)
    }).FirstOrDefaultAsync();
}

明细表合计(SqlSugar)

完整配置见:table 表格显示合计、明细表合计

protected override object GetDetailSummary<Detail>(ISugarQueryable<Detail> queryeable)
{
    //判断是哪张明细表
    if (typeof(Detail) == typeof(当前表明细))
    {
        return ((ISugarQueryable<当前表明细>)queryeable).Select(x => new
        {
            Weight = SqlFunc.AggregateSum(x.Weight),
            Qty = SqlFunc.AggregateSum(x.Qty),
        }).FirstOrDefault();
    }
    return null;
}
Last Updated 2026/5/12 17:18:25