查询问题 根据页面传参数查询系统异常:中文提示 : 多表查询存在别名不一致,请把Where中的f改成p就可以了,特殊需求 返回
niu 发布于2025/8/23
public async Task<IPageList<CoreCmsDepositWater>> QueryPageAsync(
Expression<Func<CoreCmsDepositWater, bool>> predicate,
Expression<Func<CoreCmsDepositWater, object>> orderByExpression,
OrderByType orderByType,
int pageIndex = 1,
int pageSize = 20,
bool blUseNoLock = false)
{
RefAsync<int> totalCount = 0;
// 构建基础查询
var query = DbClient.Queryable<CoreCmsDepositWater, CoreCmsOrder>(
(p, b) => new JoinQueryInfos(JoinType.Inner, p.orderId == b.orderId))
.Select((p, b) => new CoreCmsDepositWater
{
id = p.id,
orderId = p.orderId,
beforeAmount = p.beforeAmount,
afterAmount = p.afterAmount,
collectionBeforeAmount = p.collectionBeforeAmount,
collectionAfterAmount = p.collectionAfterAmount,
createTime = p.createTime,
collectionType = p.collectionType,
userName = p.userName,
remarks = p.remarks,
customerName = p.customerName,
beforePlatformAmount = p.beforePlatformAmount,
afterPlatformAmount = p.afterPlatformAmount,
beforeAmountReceived = p.beforeAmountReceived,
afterAmountReceived = p.afterAmountReceived,
status = b.status, // 来自关联表的字段
// 这里应该添加所有需要的字段...
});
// 根据参数决定是否使用NOLOCK
if (blUseNoLock)
{
query = query.With(SqlWith.NoLock);
}
// 添加条件筛选
if (predicate != null)
{
query = query.Where(predicate);
}
// 添加排序
if (orderByExpression != null)
{
query = orderByType == OrderByType.Asc
? query.OrderBy(orderByExpression)
: query.OrderByDescending(orderByExpression);
}
// 执行分页查询
var page = await query.ToPageListAsync(pageIndex, pageSize, totalCount);
return new PageList<CoreCmsDepositWater>(page, pageIndex, pageSize, totalCount);
}
热忱回答(5)
-
fate sta VIP0
2025/8/24Expression<Func<CoreCmsDepositWater, bool>> predicate
这个参数别名要改成一样。不要用f=>改成p=>
0 回复 -
niu VIP0
2025/8/24@fate sta: where = where.And(p => orderTypes.Contains(p.collectionType)); 我这里就是P
0 回复 -
fate sta VIP0
2025/8/25那就看Orderby 你自个排查一下。注释排查法具体是哪行代码的参数问题
0 回复 -
棉花糖 VIP0
2025/8/25query.MergeTable() 后再执行orderby
0 回复 -
cejpo VIP0
2周前我也是遇到这样的问题,请问你解决了吗?
0 回复