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
C# 唯一标识符的TSQL OrderBy vs LINQ OrderBy疯狂_C#_Linq_Tsql - Fatal编程技术网

C# 唯一标识符的TSQL OrderBy vs LINQ OrderBy疯狂

C# 唯一标识符的TSQL OrderBy vs LINQ OrderBy疯狂,c#,linq,tsql,C#,Linq,Tsql,在花了几个小时试图弄清楚为什么一段代码不同步后,我意识到TSQL OrderBy与Linq OrderBy在字符串方面有很大的不同。所以很自然地,我必须找到一种方法来确保来自tsql的语句返回与linq相同的顺序,所以我使用了一个uniqueidentifier(guid)作为我的主语句,但这似乎是错误的 以下是使用Linq的顺序(使用属性的Guid(UniqueID)类型) TSQL似乎使用uniqueidentifier的二进制值进行比较,而LINQ使用字符串值,即使行是GUID LINQ结

在花了几个小时试图弄清楚为什么一段代码不同步后,我意识到TSQL OrderBy与Linq OrderBy在字符串方面有很大的不同。所以很自然地,我必须找到一种方法来确保来自tsql的语句返回与linq相同的顺序,所以我使用了一个uniqueidentifier(guid)作为我的主语句,但这似乎是错误的

以下是使用Linq的顺序(使用属性的Guid(UniqueID)类型)

TSQL似乎使用uniqueidentifier的二进制值进行比较,而LINQ使用字符串值,即使行是GUID

LINQ结果(打印)(前几个)

00460400-a41d-465d-83c5-225f697e7bb5
015bef8d-5fa3-4c03-8d05-bfecf74b36b9
0202b433-4748-4660-97a1-94d119209aa6
03f34eb0-45cd-4586-b7d2-6e337b441c43
05e41d20-be24-4f4f-b098-574744dd84f0
0767e5d5-afba-49ab-a047-c9f509c80d3a
08f87ba1-8aa8-48a6-8f98-C3B4C651B76
0b4157c4-7bdc-4e98-a00c-9259af754844
0bd194d0-fb66-4a69-9718-2128594ff9b0
0cda256a-7632-47de-b867-a2bc46382881
0d36f81a-ca37-446e-a325-87b46ef5b8d3
0d89fd26-4204-4d0a-b187-73a36536a848
0e345ca9-3d5d-43ed-aa75-fbd356f94535
0e767557-87ea-4c31-9f54-75d354a87d0f
0f62fc97-85b0-4611-b3e5-0c5ae4f12a18
1020d776-9810-4122-a9ef-3c527f21970c
TSQL前几个

9C5231CE-01DE-4A20-A4C9-001AD0D28512
3D52B47C-B29C-44A8-99F9-00AA660610A8
FDA7B67D-AEDB-4644-96E4-0147A0EEC29D
C8C7B677-76EB-41D3-B11C-020B9047EB00
487FF542-599B-42D4-BCE3-02C5D569E509
BDAA48DB-60AF-4A36-AFDB-02FA706EE87F
2CD9D59C-C2B5-433C-9FD1-0444F0384BB3
D44695A3-6FEF-4842-BFCB-048C110FA178
28FF051C-38A7-424F-B657-0698452DFE36
D9320EC6-64CD-4C26-8C5C-088C04E22AD7
D9F7FDC1-16D6-4C3A-B117-0908A234DF95
7DB09D09-F10B-4F33-9390-09211F9B2958
D970EE98-B575-4E73-BBAC-0981D6DC1682
9B05CD9-2D85-486B-BC6B-0BA7E44F6021
539D22ED-FF2A-4376-A650-0BFE184C0E26
0F62FC97-85B0-4611-B3E5-0C5AE4F12A18
5D8EF134-0DC2-4B32-9F02-0C65940C1BCF
如何使它们返回相同的结果?

正如您所发现的,C#(
System.Guid
)和SQL Server

如果希望SQL Server按照
System.Guid
的方式对Guid进行排序,请将其转换为VARCHAR

如果要像SQL那样对
Guid
s进行C排序,请将
Guid
值转换为
System.Data.SqlGuid

var listings = validListings.Select(x =>x.TempListing)
                            .OrderBy(x=> new SqlGuid(x.UniqueID)).ToList();

也就是说,GUID不是可排序列的合适数据类型-如果可能的话,我会切换到
IDENTITY
列。

问题是什么?为什么?因为每个平台都是这样分类的。Guid不是可排序列的好选择。改为使用自动递增整数。如何使它们都返回相同的结果(添加到原始帖子)在这种特殊情况下,我尝试获取子项的标识列(使用SQLBulkCopy),因此我保存父项。。。已生成标识列。。将它们返回并添加到其子对象中。。。你的答案有效。。。尝试实现此解决方案新的URL是感谢参考。
var listings = validListings.Select(x =>x.TempListing)
                            .OrderBy(x=> new SqlGuid(x.UniqueID)).ToList();