0

列を並べ替えようとしていますが、値はデータベースに 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);
    }
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 SQLConvert.*に関するこのページの情報に基づいて、動作するように見えることにConvert.ToDouble 注意してください。試してみたときに何が起こったのかについて詳しく教えてください。

于 2012-06-08T21:53:42.357 に答える
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();
}
于 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 に答える