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());注释取消