关于sql:LINQ to Entities无法识别方法’Double Parse(System.String)’无法翻译成商店表达式C#asp.net

LINQ to Entities does not recognize the method 'Double Parse(System.String)' cannot be translated into a store expression C# asp.net

本问题已经有最佳答案,请猛点这里访问。

我试着按编号订购部门,但由于部门编号在数据库中存储为字符串,所以我不能只使用按编号订购。我试图将其解析为float,但它不起作用。然后我试图把它解析为双精度。这也不管用。有什么建议吗?以下是我的代码。

1
2
3
4
5
6
7
8
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();
}

感谢您的回答,我做了以下操作,但结果并不完全正确。

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

enter image description here


一种解决方案是:

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

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

下面的查询不起作用的原因:

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

Double.Parse无法转换为SQL中的等效函数,然后将整个SQL查询提交到数据库执行。


实际上,以下解决了问题,并提供了所需的结果:

1
 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