c# - 为什么我得到错误的过滤结果?
问题描述
我正在使用实体框架来获取 ID = 5002 的产品实体。每个产品都有一个订单列表。因此,我正在过滤订单以仅获取总计大于 10.00 的订单,但 EF 将完整列表返回给我。
using (var context = new SuperMarketContext())
{
var product = context.Product
.Include(p => p.Orders)
.Where(p => p.Id == 5002)
.First();
context.Entry(product)
.Collection(p => p.Orders)
.Query()
.Where(o => o.Total > 10)
.Load();
foreach (var item in product.Orders)
{
Console.WriteLine(item);
}
}
就像我说的那样,它给我带来了所有订单,但只有超过 10 个的订单。为什么会这样?
EF 核心 1.1.2
.Net 框架 4.6.1
解决方案
如果您已经拥有该产品的订单列表,为什么还要再次查询数据库?
固定到您的代码:
using (var context = new SuperMarketContext())
{
var product = context.Product
.Include(p => p.Orders)
.Where(p => p.Id == 5002)
.First();
var filteredOrders = context.Entry(product)
.Collection(p => p.Orders)
.Query()
.Where(o => o.Total > 10)
.Load();
foreach (var item in filteredOrders)
{
Console.WriteLine(item);
}
}
我的建议:
选项1:
using (var context = new SuperMarketContext())
{
var product = context.Product
.Include(p => p.Orders)
.Where(p => p.Id == 5002)
.First();
var orders = product.Orders.Where(o => o.Total > 10).ToList();
foreach (var item in orders)
{
Console.WriteLine(item);
}
}
选项 2:
using (var context = new SuperMarketContext())
{
var product = context.Product
.Include(p => p.Orders)
.Where(p => p.Id == 5002 && p.Orders.Where(t => t.Total > 10))
.First();
foreach (var item in product.Orders)
{
Console.WriteLine(item);
}
}
让我知道这些是否有效:)
推荐阅读
- git - 在我可以创建提交消息之前 Git 提交中止,我使用“--wait”
- python - 对张量流变量的切片分配
- c# - C# 将 HEX(韩文)转换为韩文字母
- android - Ionic 3 - 卸载应用程序时删除了 SQLite 数据库
- neo4j - neo4j 远程引导错误:TypeError: NetworkError 尝试获取资源时
- http - 如何将查询参数添加到 Dart http 请求中?
- telegram - 我应该如何回应 Telegram Bot 上哪个命令人的回答?
- ruby-on-rails - Rails - axlsx_rails,生成 xlsx 并通过 API 发送
- swift - Swift 中 Lazy var 和 var as-a-closure 之间的区别
- jquery - 使用 jQuery/javascript 命令的 Angular 6 数据订阅问题