EF core 使用中碰到的一个问题

今天使用EF core 做分页查询的时候遇到的
首先是表

分页查询的代码:

public PageResult<OrderVO> pageQuery(int pageIndex, int pageSize, string? bookName, long? categoryId, string? username)
{
    
    var query = from order in ctx.Orders
                join user in ctx.Users on order.userId equals user.id
                join address in ctx.Addresses on order.addressId equals address.id
                where (username == null || user.username.Contains(username))
                let matchingItems = ctx.OrderItems
                //.Where(i => i.orderId == order.id && ctx.Books.Any(b => b.id == i.bookId &&
                //(bookName == null || b.name.Contains(bookName) && (categoryId == null || b.categoryId == categoryId)))).ToList()
                 .Where(i => i.orderId == order.id)
                .Where(i => (bookName == null || ctx.Books.Any(b => b.id == i.bookId && b.name.Contains(bookName))) &&
                (categoryId == null || ctx.Books.Any(b => b.id == i.bookId && b.categoryId == categoryId))).ToList()
                where matchingItems.Any()
                select new OrderVO
                {
                    id = order.id,
                    userId = order.userId,
                    addressId = order.addressId,
                    total = order.total,
                    createTime = order.createTime,
                    phone = address.phone,
                    username = user.username,
                    detail = address.detail,
                    items = ctx.OrderItems.Where(i => i.orderId == order.id).ToList(),
                    receiver = address.name
                };

    PageResult <OrderVO> pageResult = new PageResult<OrderVO>();
    pageResult.list = query.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
    pageResult.total = query.Count();
    return pageResult;
}

情况是,当传入的参数为 pageIndex=1, pageSize=10, bookName=null, categoryId=2, username=null时
使用上面被注释掉的代码查询,会导致包含 categoryId=1的item 的order不被过滤掉
而用现在的代码,却可以过滤掉
两个代码看起来差不多,但是结果却有区别,是什么原因呢?求解答

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值