我数字与列表-使用什么?它们是如何工作的?我对枚举器的工作方式和LINQ有一些疑问。考虑这两个简单的选择:List<Animal> sel = (from animal in Animals
join race in Species
on animal.SpeciesKey equals race.SpeciesKey
select animal).Distinct().ToList();或IEnumerable<Animal> sel = (from animal in Animals
join race in Species
on animal.SpeciesKey equals race.SpeciesKey
select animal).Distinct();我更改了原始对象的名称,使其看起来像一个更通用的示例。查询本身并不那么重要。我想问的是:foreach (Animal animal in sel) { /*do stuff*/ }我注意到如果我用IEnumerable,当我调试和检查“sel”(在这种情况下是IEnDigable)时,它有一些有趣的成员:“innerKeySelector”、“innerKeySelector”和“outerKeySelector”,最后两个成员似乎是委托。“内部”成员没有“动物”实例,而是“物种”实例,这对我来说很奇怪。“外部”成员确实包含“动物”实例。我想是由两位代表来决定哪些是进去的,哪些是从里面出来的?我注意到,如果使用“DISTISTION”,“Inside”包含6项(这是不正确的,因为只有2项是不同的),但是“外部”确实包含正确的值。同样,可能是委托方法决定了这一点,但这比我对IEnDigable的了解要多一点。最重要的是,这两种选择中哪一种表现最好?通过.ToList()?或者直接使用枚举器?如果可以的话,也请解释一下或抛出一些链接来解释IEnDigable的这种用法。
2 回答
不负相思意
TA贡献1777条经验 获得超10个赞
IEnumerable
foreach
foreach
List
IEnumerable
IEnumerable
.ToList()
foreach
IEnumerable
foreach
.ToList()
.
var things = from item in BigDatabaseCall() where .... select item;// this will iterate through the entire linq statement:int count = things.Count();// this will stop after iterating the first one, but will execute the linq againbool hasAnyRecs = things.Any();// this will execute the linq statement *again*foreach( var thing in things ) ...// this will copy the results to a list in memoryvar list = things.ToList()// this won't iterate through again, the list knows how many items are in itint count2 = list.Count();// this won't execute the linq statement - we have it copied to the listforeach( var thing in list ) ...
- 2 回答
- 0 关注
- 418 浏览
添加回答
举报
0/150
提交
取消