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.Parse
double.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。真的吗?