【问题标题】:Order by String as Float按字符串排序为浮点数
【发布时间】:2012-10-14 16:43:35
【问题描述】:

我有一个表,其中包含一个名为“长度”的字段,类型为 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))

但这也会产生错误。

有什么办法吗?

【问题讨论】:

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


    【解决方案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

    【讨论】:

    • 谢谢,我以前避免使用它,因为在尝试输入它时,Intelisense 会说“此方法将始终返回 [...exception]”,但如果仍然使用它 - 然后它会编译并工作正常...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    • 1970-01-01
    • 2014-09-25
    相关资源
    最近更新 更多