List<Guid> 中的降序不同于 IQueryable OrderByDescending
Descending order in List<Guid> is different then IQueryable OrderByDescending
我正在开发 .NET CORE 2.0 应用程序,其中一部分我需要按降序对 GUID 进行排序。我将列表中的 GUID 列表传递给另一种方法,其中该集合按降序排序但我发现结果不同然后使用 IQueryable Linq 作为 select(x=>x.id).OrderByDescending(x=>x)
也与 SQL 服务器进行比较,第二个选项似乎正确的。
我需要按降序输出列表排序作为与 IQueryable Linq 相同的结果 select(x=>x.id).OrderByDescending(x=>x)
List<Guid> sortedList =
C95F4897-35D8-409D-BF0E-B0D6E1BCAC55
D867FD57-F728-46E9-BFF0-F168BAC674C4
F05BCAA7-600E-406F-B9F3-7CD839FFC98B
383525C6-F158-431C-A6A5-B42FF3CBF5AE
我也试过下面的代码但没有得到正确的结果
var s1 = sortedList.OrderByDescending(i => i);
sortedList.Sort();
sortedList.Reverse();
没有排序的数据
LINQ 中的数据 IQueryable 排序(这是我想要的结果,但来自 collection.sort
数据从集合中排序
当您在列表上调用 .OrderByDescending 时,您正在调用 Enumerable.OrderByDescending. Conversely, when you are calling .OrderByDescending on a linq query, you are calling Queryable.OrderByDescending。
区别(这里重要的区别)是可枚举方法使用默认比较器(在这种情况下数据类型 GUID
),而可查询方法转换为在数据库上执行的 sql 语句,因此使用 SQL 比较器(uniqueidentifier
)。 GUID
比较器平均使用所有 16 个字节,而在 SQL 中,最后 6 个字节是最重要的(Source1, Source2(旧的,但仍然有效))。
你说你想要可查询方法的结果,同时使用可枚举方法(本质上)。您可以使用 System.Data.SqlTypes.SqlGuid
数据类型而不是 system.Guid
来实现此目的。您可以简单地将您的 Guid 转换为 SqlGuid。或者,也可能是更简洁的解决方案,您可以使用 SqlGuid.CompareTo
方法创建自己的 comparer,并按以下顺序使用它:OrderByDescending(x => x, new MyComparer())
.
我正在开发 .NET CORE 2.0 应用程序,其中一部分我需要按降序对 GUID 进行排序。我将列表中的 GUID 列表传递给另一种方法,其中该集合按降序排序但我发现结果不同然后使用 IQueryable Linq 作为 select(x=>x.id).OrderByDescending(x=>x)
也与 SQL 服务器进行比较,第二个选项似乎正确的。
我需要按降序输出列表排序作为与 IQueryable Linq 相同的结果 select(x=>x.id).OrderByDescending(x=>x)
List<Guid> sortedList =
C95F4897-35D8-409D-BF0E-B0D6E1BCAC55
D867FD57-F728-46E9-BFF0-F168BAC674C4
F05BCAA7-600E-406F-B9F3-7CD839FFC98B
383525C6-F158-431C-A6A5-B42FF3CBF5AE
我也试过下面的代码但没有得到正确的结果
var s1 = sortedList.OrderByDescending(i => i);
sortedList.Sort();
sortedList.Reverse();
没有排序的数据
LINQ 中的数据 IQueryable 排序(这是我想要的结果,但来自 collection.sort
数据从集合中排序
当您在列表上调用 .OrderByDescending 时,您正在调用 Enumerable.OrderByDescending. Conversely, when you are calling .OrderByDescending on a linq query, you are calling Queryable.OrderByDescending。
区别(这里重要的区别)是可枚举方法使用默认比较器(在这种情况下数据类型 GUID
),而可查询方法转换为在数据库上执行的 sql 语句,因此使用 SQL 比较器(uniqueidentifier
)。 GUID
比较器平均使用所有 16 个字节,而在 SQL 中,最后 6 个字节是最重要的(Source1, Source2(旧的,但仍然有效))。
你说你想要可查询方法的结果,同时使用可枚举方法(本质上)。您可以使用 System.Data.SqlTypes.SqlGuid
数据类型而不是 system.Guid
来实现此目的。您可以简单地将您的 Guid 转换为 SqlGuid。或者,也可能是更简洁的解决方案,您可以使用 SqlGuid.CompareTo
方法创建自己的 comparer,并按以下顺序使用它:OrderByDescending(x => x, new MyComparer())
.