Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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_Filter - Fatal编程技术网

数据库/linq查询中的筛选和排序操作是可交换的吗?

数据库/linq查询中的筛选和排序操作是可交换的吗?,linq,sorting,filter,Linq,Sorting,Filter,对于任意对象集合,以下两个LINQ表达式是否总是给出相同的结果(假设LINQ提供程序相同): var result=list.OrderBy(x=>x.FirstName)。其中(x=>x.Age>18) var result=list.Where(x=>x.Age>18).OrderBy(x=>x.FirstName) While指定为,而不是 换句话说,不,因为不能保证排序是稳定的,所以这两个查询不能保证为所有提供者提供相同的结果。至少,结果的顺序可能不同。它们怎么可能不返回相同的结果?这将

对于任意对象集合,以下两个LINQ表达式是否总是给出相同的结果(假设LINQ提供程序相同):

  • var result=list.OrderBy(x=>x.FirstName)。其中(x=>x.Age>18)

  • var result=list.Where(x=>x.Age>18).OrderBy(x=>x.FirstName)

  • While指定为,而不是


    换句话说,不,因为不能保证排序是稳定的,所以这两个查询不能保证为所有提供者提供相同的结果。至少,结果的顺序可能不同。

    它们怎么可能不返回相同的结果?这将是一个严重的错误,逻辑上应该如此。从一个查询到下一个查询,两个具有相同“FirstName”值的不同对象可能会以不同的顺序返回。如果IQueryable provider在原始问题中对这两种情况(如实体框架)都是相同的,这是否适用?@matori82实体框架还有一个复杂之处,底层SQL中的顺序一开始就不稳定。如果运行第一个查询,在表中插入新行,然后再次运行完全相同的查询,则可能无法获得相同的排序结果。排序相等的值,即使结果中未包含新行。排序为相等的值可能以另一个顺序出现。目前,EF从两个查询生成相同的sql,但这是EF特定的实现细节:)