明细表查询、明细表合计

使用说明
使用说明
- 明细表相关逻辑写在 主表 的
[表Service.cs]中。 - 下方 行内备注 与
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;
}
