gpt4 book ai didi

Linq 返回计数时选择什么?

转载 作者:行者123 更新时间:2023-12-02 08:52:28 24 4
gpt4 key购买 nike

我养成了这样做的愚蠢习惯:

return 
(from c in db.tblUserAlerts
where c.userID == UserID && !c.hasRead
select new { c.ID }).Count();

按预期返回整个 c 记录的 c.ID 是否更好(节省内存)?示例:

return 
(from c in db.tblUserAlerts
where c.userID == UserID && !c.hasRead
select c).Count();

最佳答案

我认为问题更多的是数据必须经过多少转换。对于您要尝试做的事情,我认为最有效的方法是:

return db.tblUserAlerts.Count(c=>c.userID == UserID && !c.hasRead);

因为您实际上只是通过 1 种方法运行您的数据,它并没有复制或转换您的数据,只是计算与谓词匹配的事物。

编辑: 我再次查看了您的标签,发现您有 linq-to-sql。如果您使用的是 LINQ to SQL 之类的查询提供程序,则会转换查询。我猜 linq-to-sql 查询翻译器会翻译成类似这样的东西:

SELECT count(c.ID) FROM tblUserAlerts WHERE c.userID == 'UserID' AND NOT c.hasRead

在这种情况下,应该没有任何速度差异,除了 LINQ-to-SQL 可能需要做更多的工作来翻译您的查询,因为表达式树中有更多的工作。这种速度差异几乎可以忽略不计。我上面的原始答案更适用于 LINQ-to-Objects。使用 LINQ-to-SQL 除非您对任何速度降低都非常敏感(即您在紧密循环中运行了数千次)它们应该大致相同。

关于Linq 返回计数时选择什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7455984/

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