Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
LINQ到对象和排序顺序_Linq_Sorting_Arraylist - Fatal编程技术网

LINQ到对象和排序顺序

LINQ到对象和排序顺序,linq,sorting,arraylist,Linq,Sorting,Arraylist,我正在尝试使用包含自定义对象的ArrayList。数组列表已排序。我正在使用LINQ to对象在多个字段上搜索。LINQ to objects search将使用底层排序,还是将扫描整个arraylist。LINQ扩展方法将不会利用底层排序。这些方法是为处理IEnumerable而编写的,因此不能对底层集合进行任何假设。从实现来看,一些LINQ方法将检查输入是否是ICollection,如果是,则调用相应的方法(我相信Count()是这样工作的),以避免进行线性扫描,但在这种情况下,LINQ无法

我正在尝试使用包含自定义对象的ArrayList。数组列表已排序。我正在使用LINQ to对象在多个字段上搜索。LINQ to objects search将使用底层排序,还是将扫描整个arraylist。

LINQ扩展方法将不会利用底层排序。这些方法是为处理IEnumerable而编写的,因此不能对底层集合进行任何假设。从实现来看,一些LINQ方法将检查输入是否是ICollection,如果是,则调用相应的方法(我相信Count()是这样工作的),以避免进行线性扫描,但在这种情况下,LINQ无法检测数组是否已排序,因此无法利用这一事实


此外,如果您正在执行类似myList.Where(o=>o.Prop1<2&&o.Prop2==3)的操作,则传递到Where()的Func对于LINQ来说是完全不透明的,因此即使它知道列表已排序,也无法确定正在检查哪些属性。

不要再使用
ArrayLists
,而是使用严格键入的
列表