c# – 何时使用List,IEnumerable和ArrayList
我的问题非常简单.我什么时候应该使用List,IEnumerable和ArrayList.
这是我的情景.我正在使用LINQ在Web应用程序中工作.信息以IEnumerable的形式返回: IEnumerable<Inventory> result = from Inventory i in db where.... 我不确定IEnumerable是如何工作的,但是每个操作都需要花费很多时间来执行.更具体地说,result.Count(),result.ElementAt(i),result.ToList等,每个操作都需要相当长的时间. 所以,我想知道我是否应该通过执行result.ToList将其视为List,而不是使用IEnumerable变量. 谢谢! 解决方法
如果我理解你正在做什么,你会在db select i中有一个类似于Inventory i的查询,然后你对结果做了几个操作:
var count = result.Count(); var fifth = result.ElementAt(5); var allItems = result.ToList(); 现在考虑将查询作为不同类型时会发生什么: > IQueryable< T> var result = from Inventory i in db select i; IQueryable<Inventory> result = from Inventory i in db select i; 上面两行是相同的.它们实际上并没有进入数据库,只是创建了查询的表示.如果你有这个,Count()将执行一个SQL查询,如SELECT COUNT(*)FROM Inventory,ElementAt(5)将执行另一个只占用表中第五项的查询,ToList()将执行类似SELECT * FROM的操作库存,但这就是我们想要的. IEnumerable<Inventory> result = from Inventory i in db select i; 再次执行此操作不会进入数据库,它只会创建查询的表示形式.但它是一种不能使用特定于IQueryable< T>的方法的表示,因此任何LINQ操作都将枚举该集合,该集合将执行SELECT * FROM Inventory之类的SQL查询. 因此,对于示例:Count()将仅执行SELECT * …查询以计算结果中的项目. ElementAt(5)将再次执行整个查询,只丢掉除第五个以外的所有项目. ToList()将再次执行查询. List<Inventory> result = (from Inventory i in db select i).ToList(); 这实际上会立即执行SELECT * FROM Inventory查询.您对结果执行的所有操作都不会触及数据库,它们将在内存中完成. 你应该从中拿走什么?首先,永远不要使用IEnumerable< T>作为数据库查询的类型.它表现糟糕. 如果要对结果进行多个不同的操作,请使用IQueryable< T>可能是最好的解决方案. 如果您想要检索整个结果,请尽快使用ToList()(或ToArray()),然后使用生成的List< T>. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |