LINQ to Entities 无法识别方法“Double Parse(System.String)”无法转换为存储表达式 C# asp.net [重复]

Posted

技术标签:

【中文标题】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 [duplicate] 【发布时间】:2017-11-15 18:40:02 【问题描述】:

我尝试按编号对部门进行排序,但由于部门编号作为字符串存储在数据库中,我不能只使用按编号排序。 我尝试将其解析为浮点数,但它不起作用。然后我尝试将其解析为 Double。那也不行。有什么建议?以下是我的代码。

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();

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

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

【问题讨论】:

我有点惊讶DepartmentNmber 不是双重类型。 我们猜不出你对“正确”的定义是什么。你的意思是你想让209.01 出现在222 之前?屏幕截图中显示的排序似乎表明您的语言环境使用逗号作为小数点,然后对其进行解析。 感谢您的评论,我刚刚想通了,现在可以使用了。请进一步阅读我的答案。 是的,请参阅链接的重复项。它有助于将问题分解为较小的部分,然后您会发现每个问题都已被询问和回答过。 :) 【参考方案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.Parsedouble.Parse不能翻译成sql中的等价函数,然后把整个sql查询提交给数据库执行。

【讨论】:

简而言之:神奇之处在于.ToList() 方法在OrderBy() 之前。 感谢您的回答,请阅读我在原始问题中的编辑 @Mindan 欢迎您。我看到了您的编辑,看来您没有遵循我上面提出的方法。你能试试让我知道吗?谢谢 @Mindan 你的意思是建议的方法。对吗?【参考方案2】:

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

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

【讨论】:

以上是关于LINQ to Entities 无法识别方法“Double Parse(System.String)”无法转换为存储表达式 C# asp.net [重复]的主要内容,如果未能解决你的问题,请参考以下文章

LINQ to Entities 无法识别方法 IsNullOrWhiteSpace

错误:LINQ to Entities 无法识别方法 DataLength

LINQ To Entities 无法识别方法 Last。真的吗?

LINQ To Entities 无法识别方法 Last。真的吗?

C# LINQ to Entities 无法识别方法“布尔”

我如何修复“LINQ to Entities无法识别方法”错误