我正在尝试对列进行排序,但该值在数据库中存储为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);
}
答案 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);
}
}