C# 按字符串作为浮点数排序

C# 按字符串作为浮点数排序,c#,linq-to-sql,floating-point,sql-order-by,varchar,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将字符串转换为浮点,但在运行它时,它会返回一个转

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

SELECT * FROM [Table] ORDER BY CAST(length AS float) DESC
我尝试了几种方法,告诉LinqToSQL将字符串转换为浮点,但在运行它时,它会返回一个转换错误(请注意,没有intellisense错误,编译期间也没有错误,只有在执行时)

我试过:

Results = dbx.[Items].Where([conditions]).OrderByDescending(b => float.Parse(b.length))
我还将满足于四舍五入和整数转换,并以此进行排序(尽管我当然更喜欢使用实数),我尝试了:

Results = dbx.[Items].Where([conditions]).OrderByDescending(b => Convert.ToInt32(b.length))
但这也给出了一个错误


有什么办法吗?

您需要使用
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
)相同。

您需要使用
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
)相同。谢谢,我以前避免过它,因为在尝试键入它时,Intellisense会说“此方法将始终返回[…异常]”,但如果仍然使用它,那么它将按照它应该的方式编译和工作…谢谢,我以前一直避免使用它,因为在尝试键入它时,Intelissense会说“此方法将始终返回[…异常]”,但如果仍然使用它,那么它将按照它应该的方式编译和工作。。。