我试图在一个 IEnumerable
中使用谓词搜索特定记录。 如果该记录不存在,则要返回第一条记录。 如果也不存在,我只想要 null
。
我目前在使用:
var category = categories.FirstOrDefault(
c => c.Category == "C") ??
category.FirstOrDefault();
ReSharper 给我一个警告 (Possible multiple enumeration of IEnumerable)。这个警告告诉我我的 SQL 语句可能会被执行两次。一次是为了查找“C”类别,另一次是为了获取第一条记录。如果我先使用 categories.ToList()
将类别转换为列表,则警告将消失。但是如果 categories 包含大量记录,则可能会变慢。
有没有更优雅的方法来处理这个问题?还是我应该忽略这个警告?
IEnumerable
进行此操作,我建议使用自定义扩展方法;但是考虑到这些项目来自 SQL 服务器,如果你想避免始终迭代所有记录,你需要在数据库服务器上进行操作。我认为不太可能有一组可以自动转换的 LINQ 方法,所以我的建议是使用存储过程。 - AakashM