0

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

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

3 回答 3

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字段开始。如果可能,请修复您的架构。

编辑:请注意,根据此页面上有关 LINQ to SQL 的信息,Convert.*它看起来Convert.ToDouble 应该可以工作,因此请向我们提供有关您尝试它时发生的情况的更多信息。

于 2012-06-08T21:53:42.357 回答
0

Rather use TryParse to avoid exceptions. In this code I used 0.0 as a default value if it could not parse the string.

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();
}
于 2012-06-08T21:55:49.957 回答
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);
 }
}
于 2012-06-08T22:11:52.630 回答