按字符串排序为浮点数

时间:2012-10-24 15:41:31

标签: c# linq-to-sql floating-point sql-order-by varchar

我有一个名为'length'的字段的表,类型为varchar(10)。这些字段包含“实数”(带小数点的小数 - 例如647.45224) - 表示为字符串。 我想调用一个Linq-to-SQL查询,该查询将通过此字段(在其数字表示中)对SELECT的结果进行排序,就像使用此“本机”SQL查询一样:

SELECT * FROM [Table] ORDER BY CAST(length AS float) DESC

我已经尝试了几种告诉LinqToSQL将字符串转换为float的方法,但是在运行时它会返回转换错误(请注意,没有智能感知错误,编译期间也没有错误,只有在执行时)。 / p>

我试过了:

Results = dbx.[Items].Where([conditions]).OrderByDescending(b => float.Parse(b.length))

我也会选择舍入并转换为Int并按顺序排序(虽然我更喜欢使用实际的数字),我试过了:

Results = dbx.[Items].Where([conditions]).OrderByDescending(b => Convert.ToInt32(b.length))

但这也是错误的。

有什么办法吗?

1 个答案:

答案 0 :(得分:1)

您需要使用Convert.ToDouble

dbx.[Items].Where([conditions]).OrderByDescending(b => Convert.ToDouble(b.length))

它将生成以下SQL

ORDER BY CONVERT(Float,[t0].[length])

请注意,SQL服务器类型float与.NET类型double(不是float

相同