gpt4 book ai didi

c# - Linq 查询使所有调用都带外键的表数据

转载 作者:行者123 更新时间:2023-11-30 15:45:21 24 4
gpt4 key购买 nike

from d in Customers
select d;

此查询调用每个 customerId 以获取 customerId = 该 customerId 的订单。

这会使调用变慢变长,我不需要订单数据。如何禁用它?

其他详细信息:

我在做条件

if (flag)
{
return (from d in Customers
select d).ToList();
}
else
{
return (from d in Customers
where d.Orders.Count > 10
select d).ToList();
}

即使在 if 查询中,它也会调用我想在这两种情况下阻止的每个客户的所有订单。

最佳答案

正如 Craig Stuntz 所暗示的,这里的问题是 Customers 来自哪里以及它是什么类型。如果它是内存中的对象,则过滤将全部发生在内存中;如果它是一个对象查询,它将发生在您的数据库服务器上,这就是您想要的。我们看不到您的代码,无法了解更多关于 Customers 的信息,但我会建议一个正确和错误的示例:

右(或多或少):

using (var context = new MyContextType())
{
var Customers = context.Customers;

var query = from d in Customers
select d;

if (!flag)
{
query = from d in query
where d.Orders.Count > 10
select d;
}

return query.ToList();
}

错误:

using (var context = new MyContextType())
{
var Customers = context.Customers.ToList(); // ToList triggers the query

var query = from d in Customers
select d;

if (!flag)
{
query = from d in query
where d.Orders.Count > 10
select d;
}

return query.ToList();
}

看出区别了吗?它是 context.Customers.ToList()。在您有机会过滤它之前,它会运行完整的查询并将所有内容加载到内存中。在对其运行 ToList() 之前,请确保已完全构建查询,包括 where 逻辑。

@Craig - 希望你不介意我采纳你的想法并付诸实践。如果你有一个答案,我会投票给你的答案。

关于c# - Linq 查询使所有调用都带外键的表数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5278643/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com