使用说明
使用说明
- 在后台 [表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)
异步启用说明
- 代码生成器勾选[异步接口]后此方法才会执行,默认执行的是上面同步方法
- 内容较多,按需实现里面的功能
/// <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());
