我想知道Sql server和Datatable排序上的Order By子句是否会以相同的方式对记录进行排序。我试过两个,发现记录以不同的方式排序。任何人都可以澄清吗?
SELECT Top 10000
'Link' As [Link],
ODST.ID AS [ID],
ODST.Type1 AS [Type 1],
ODST.Type2 AS [Type 2],
COUNT(DISTINCT ODST.Col1) AS [Col 1],
COUNT(DISTINCT ODST.ID) AS [Col 2],
......
......
COUNT(DISTINCT ODST.Col11) AS [Col 11],
SUM(ODST.Col12) AS [Col 12],
.....
.....
SUM([Col35]) AS [Col 35]
FROM ABC ODST
WHERE id in
(Select id from
(select Top 10000 count(*) AS Line, id from ABC WHERE 1=1
group by id order by Line desc) t2) AND 1=1
GROUP BY ODST.id, ODST.Type1, ODST.Type2
ORDER BY ODST.Type1, ODST.Type2
我在上面的查询中使用了order by 我查询的表中有数百万条记录。它会在订单中产生结果,并且运行速度非常慢 所以我们决定将排序部分移到c#。我们已从此查询中注释掉Order By并将结果返回给c#。 在数据集中获取结果并尝试基于2列进行排序。
排序代码是
ds.Tables[0].DefaultView.Sort = "[Type 1],[Type 2] ASC";
ds1.Tables.Add(ds.Tables[0].DefaultView.ToTable());
它以不同的顺序对结果进行排序
所以,总而言之,我想知道这两种排序是否以相同的方式起作用?
答案 0 :(得分:0)
基本上没有。
Order By
的SQL实现可能有所不同,因为它是执行排序的另一个库。
在您的数据表或任何类型的ORM(如实体框架)中,可能会有一些差异,因为对象可以转换为string
,DateTime
,(等等)。
.NET Framework
中执行的排序将基于数据类型,通常通过IComparable
接口。这可能与SQL中实现的逻辑不同。虽然这些框架的供应商会尽力保持一致,但可能会出现差异。
您可以通过实体框架看到这种情况发生(如果它尚未“固定”)。
如果在某个地方查询数据库中string
.Contains
,则会在sql中将其转换为“LIKE”,这可能不区分大小写。
对内存C#List
执行此操作,它可能区分大小写,因此可能会产生不同的结果。