非重复:我认为这不是一个重复的问题,因为在我的情况下,忽略警告实际上更好。
例如,
IEnumerable<Item> milionItems = GetAMillionItemsFromDatabase();
var item1 = millionItems.FirstOrDefault(x=> x.Condition == "Excellent");
var item2 = millionItems.FirstOrDefault(x=> x.Condition == "Good");
我在'millionItems'下面收到了警告消息,我知道这是什么意思,但我不确定是否总是值得进行ToList操作来消除它。
GetAMillionItemsFromDatabase().ToList();
这样做在性能方面看起来很糟糕,因为它会一次性将一百万条记录导入内存。
然而,如果我不这样做并继续枚举IEnumerable,即使它会两次访问数据库,它也不会带入所有数据,因为它会查找第一个匹配项并返回。在这种情况下,对我来说最好实际上忽略消息。
IEnumerable
接口的类在尝试两次枚举时将返回一个空集合。您需要确定在您的情况下什么最好:将所有项目保存在列表中,进行多个潜在昂贵的数据库调用,甚至放弃LINQ并编写循环以在数据上进行单次获取item1
和item2
。在这种情况下,Enumerable.Aggregate
可能也会有用。 - Jim Mischel