1

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

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

我已经尝试了几种方法来告诉 LinqToSQL 将字符串转换为浮点数,但是在运行它时 - 它返回一个转换错误(请注意,编译期间没有智能感知错误,也没有错误,只有在执行时)。

我试过了:

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

我还将满足于舍入并转换为 Int 并以此进行排序(尽管我当然更喜欢使用实数),我尝试过:

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

但这也给出了一个错误。

有什么办法吗?

4

1 回答 1

1

你需要使用Convert.ToDouble

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

它将生成以下SQL

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

请注意,SQL server 类型float与 .NET 类型相同double(不是float

于 2012-10-24T16:01:27.320 回答