gpt4 book ai didi

c# - 获取 COUNT 时 Linq Select 语句变慢

转载 作者:太空狗 更新时间:2023-10-29 20:57:20 25 4
gpt4 key购买 nike

我正在尝试使用 EntityFramework 和 Linq 从以下方法中获取总记录数。返回计数很慢。

public static int totalTracking(int id)
{
using (var ctx = new GPEntities())
{
var tr = ctx.Tracking
.Where(c => c.clientID == Config.ClientID)
.Where(c => c.custID == id)
.Where(c => c.oOrderNum.HasValue)
.ToList();
return tr.Count();
}
}

最佳答案

您可以显着简化查询:

using (var ctx = new GPEntities())
{
return ctx.Tracking
.Where(c => c.clientID == Config.ClientID)
.Where(c => c.custID == id)
.Where(c => c.oOrderNum.HasValue)
.Count();
}

当您调用 ToList 时,这将触发具体化,因此将向数据库发出查询并检索所有列。实际计数将发生在客户端。

如果您只执行 Count,而没有 ToList,当您调用 Count 时,它会发出查询,服务器将只返回一个数字,而不是一张 table 。

这对性能来说并不是那么关键,但我认为如果没有那么多 Where,代码看起来会更漂亮一些:

using (var ctx = new GPEntities())
{
return ctx.Tracking
.Where(c =>
c.clientID == Config.ClientID &&
c.custID == id &&
c.oOrderNum.HasValue)
.Count();
}

甚至

using (var ctx = new GPEntities())
{
return ctx.Tracking
.Count(c =>
c.clientID == Config.ClientID &&
c.custID == id &&
c.oOrderNum.HasValue);
}

关于c# - 获取 COUNT 时 Linq Select 语句变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6379996/

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