2017-06-13 90 views
0

我尝试按数字顺序排列Departments,但由于在数据库中以字符串形式存储分区号,我不能只用数字顺序。 我尝试将其解析为float,但它不起作用。然后我试图解析它为Double。那也行不通。有什么建议么?以下是我的代码。LINQ to Entities无法识别方法'Double Parse(System.String)'无法转换为存储表达式C#asp.net

using (var db = new Context()) 
{ 
    var datasource = (from x in db.Departments 
         orderby double.Parse(x.DepartmentNumber) 
         select x).ToList(); 
    lvData.DataSource = datasource; 
    lvData.DataBind(); 
} 

感谢您的回答,我做了以下,但结果不正确entirly。

var datasource = (from x in db.Departments orderby x.DepartmentNumber select x).ToList().OrderBy(Department => float.Parse(Department.DepartmentNumber)); 

enter image description here

+0

我有点supreised是'DepartmentNmber'不是类型duoble的。 –

+0

我们无法猜测您对“正确”的定义是什么。你的意思是你想'209.01'出现在'222'之前?屏幕截图中显示的排序似乎表明您的语言环境使用逗号作为小数点,然后对其进行解析。 – CodeCaster

+0

感谢您的评论,我只是想通了,现在它的作品。请进一步阅读我的答案。 – Mindan

回答

1

一个解决方案,将是以下:

var datasource = db.Departments 
        .ToList() 
        .OrderBy(department => double.Parse(department.DepartmentNumber)); 

你获取了在应用程序的内存数据库中的所有数据(通过调用ToList,其中要求立即执行查询),然后在内存中进行排序。

之所以下面的查询不起作用:

var datasource = (from x in db.Departments 
        orderby double.Parse(x.DepartmentNumber) 
        select x).ToList(); 

的事实是,double.Parse不能转换到SQL等效功能,然后整个SQL查询被提交到数据库执行。

+0

简而言之:魔法在'OrderBy()'之前的'.ToList()'方法中。 –

+0

感谢您的回答,请阅读我在原始问题编辑 – Mindan

+0

@Mindan不客气。我看到你的编辑,因为你似乎没有按照我上面提出的方法。你可以试试看,让我知道吗?谢谢 – Christos

0

其实下面解决了这个问题,并提供所要求的结果:

var datasource = (from x in db.Departments orderby x.DepartmentNumber select x).ToList().OrderBy(Department => Convert.ToDouble(Department.DepartmentNumber, System.Globalization.CultureInfo.InvariantCulture)); 

enter image description here

相关问题