gpt4 book ai didi

c# - LINQ FirstOrDefault 与谓词,如果没有找到只是 FirstOrDefault

转载 作者:行者123 更新时间:2023-11-30 16:14:42 27 4
gpt4 key购买 nike

我正在尝试在 IEnumerable 中搜索特定记录(使用谓词)。如果该记录不存在,我想返回第一条记录。如果那也不存在,我只想要 null

我正在使用

var category = categories.FirstOrDefault(
c => c.Category == "C") ??
category.FirstOrDefault();

ReSharper 给我一个警告(可能对 IEnumerable 进行多重枚举)。警告告诉我我的 sql 语句可能被执行了两次。一次尝试找到“C”类别,并再次获得第一条记录。如果我首先使用 categories.ToList() 将类别转换为列表,则警告将消失。但是,如果类别包含大量记录,那可能会很慢。

有没有更优雅的方法来做到这一点?还是我应该忽略警告?

最佳答案

ReSharper 警告更像是一条消息,说“想想你在做什么”,而不是“你做错了”。

您的解决方案还不错,但这完全取决于情况。

在生产中,类别不存在的频率是多少?如果这种情况很少见,请按原样保留您的代码。另一件需要考虑的事情是这段代码的执行频率。是一天一次,还是每秒十次?它更像第一个吗?保持原样。

否则,微优化可能会有好处。像 Seyana 这样的解决方案可能有效,或者您可以将查询重写为 union() 和 Take(1),这样只有一个查询将发送到 SQL Server;但这并不意味着数据库引擎不会执行这两个查询。

分析会告诉您哪个解决方案最快或使用的资源最少。

关于c# - LINQ FirstOrDefault 与谓词,如果没有找到只是 FirstOrDefault,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20501059/

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