如何将LINQ nvarchar转换为double

时间:2012-06-08 21:48:11

标签: linq linq-to-sql

我正在尝试对列进行排序,但该值在数据库中存储为nvarchar,如何将其转换为double,以便在此处进行排序?我试着做Convert.ToDouble(t.PressureChange),但它没有用......

     if (column == "PressureChange")
    {
        if (sortDirection == "ascending")
            testResults = testResults.OrderBy(t => t.PressureChange);
        else
            testResults = testResults.OrderByDescending(t => t.PressureChange);
    }

3 个答案:

答案 0 :(得分:1)

您可以尝试

if (column == "PressureChange")
{
    if (sortDirection == "ascending")
    {
        testResults = testResults.OrderBy(t => double.Parse(t.PressureChange));
    }
    else
    {
        testResults = testResults.OrderByDescending
            (t => double.Parse(t.PressureChange));
    }
}

...但这取决于LINQ to SQL是否支持该方法。说实话,听起来你在设计方面遇到了更大的问题:如果你试图在数据库中存储double值,你就不应该使用varchar字段首先。如果可能,请修复您的架构。

编辑:请注意,根据this page about LINQ to SQL and Convert.*上的信息,Convert.ToDouble 应该工作,所以请向我们提供有关您尝试时发生的事情的更多信息。< / p>

答案 1 :(得分:0)

而是使用TryParse来避免异常。在这段代码中,如果无法解析字符串,我使用0.0作为默认值。

double temp = 0.0;
if (column == "PressureChange")
{
    if (sortDirection == "ascending")
        testResults = testResults.OrderBy(t => (double.TryParse(t.PressureChange.toString(), out temp) ? temp : 0.0)).ToList();
    else
        testResults = testResults.OrderByDescending(t => (double.TryParse(t.PressureChange.toString(), out temp) ? temp : 0.0)).ToList();
}

答案 2 :(得分:0)

我还没有测试过,但您可以使用这样的扩展方法:

public class StringRealComparer : IComparer<string>
{
 public int Compare(string s1, string s2)
 {
  double d1;
  double d2;
  double.tryParse(s1, out d1);
  double.TryParse(s2, out d2);
  return double.Compare(d1, d2);
 }
}