C#中的数据表排序和SQL中的Order By排序会给出相同的结果集吗?

时间:2013-11-22 12:02:33

标签: c# sql sql-server

我想知道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());

它以不同的顺序对结果进行排序

所以,总而言之,我想知道这两种排序是否以相同的方式起作用?

1 个答案:

答案 0 :(得分:0)

基本上没有。

Order By的SQL实现可能有所不同,因为它是执行排序的另一个库。

在您的数据表或任何类型的ORM(如实体框架)中,可能会有一些差异,因为对象可以转换为stringDateTime,(等等)。

.NET Framework中执行的排序将基于数据类型,通常通过IComparable接口。这可能与SQL中实现的逻辑不同。虽然这些框架的供应商会尽力保持一致,但可能会出现差异。

您可以通过实体框架看到这种情况发生(如果它尚未“固定”)。

如果在某个地方查询数据库中string .Contains,则会在sql中将其转换为“LIKE”,这可能不区分大小写。

对内存C#List执行此操作,它可能区分大小写,因此可能会产生不同的结果。

相关问题