首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Linq查询中OrderBy字符串字段中的整数

如何在Linq查询中OrderBy字符串字段中的整数
EN

Stack Overflow用户
提问于 2011-11-11 04:31:26
回答 4查看 31.5K关注 0票数 29

我有一些来自数据库的数据,我不能轻易地更改其模式。我希望对其进行排序,并将其绑定到一个基于数字ID的控件上。问题是,应用程序接口将数字存储在字符串字段中,而不是在转换尝试时存储为int和Linq barfs。

代码语言:javascript
复制
myControl.DataSource = dataFromDB.OrderBy(o => int.Parse(o.StringHoldingAnInt));

LINQ to Entities无法识别方法“”Int32 Parse(System.String)“”方法,并且此方法无法转换为存储表达式。“”

Convert.ToInt32也不能工作。

LINQ to Entities无法识别方法“”Int32 ToInt32(System.String)“”方法,并且此方法无法转换为存储表达式。“”

不适合以字符串的形式进行排序,因为这些值的长度并不完全相同,它会像这样对它们进行排序: 1、10、11、2、3。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-11-11 04:36:24

这几乎没有效率,因为您没有利用数据库查询来过滤结果,但这基本上是查询所有数据,然后在客户机上过滤。

代码语言:javascript
复制
myControl.DataSource = dataFromDB.ToList().OrderBy(o => int.Parse(o.StringHoldingAnInt));
票数 19
EN

Stack Overflow用户

发布于 2020-07-08 21:57:00

想出了一个简单的技巧来解决这个问题:首先按长度排序,然后是normaly。

代码语言:javascript
复制
dataFromDB.OrderBy(o => o.StringHoldingAnInt.Length).ThenBy(o => o.StringHoldingAnInt)

这一切都是在DB中完成的,不会加载到内存中。

票数 10
EN

Stack Overflow用户

发布于 2017-12-08 20:33:10

在DB端可以做到这一点。这个想法取自here。因此,它按照格式正确的字符串进行排序(将零个字符添加到左侧,然后从右侧获取所需字符量)

代码语言:javascript
复制
myControl.DataSource = dataFromDB
    .OrderBy(o =>  DbFunctions.Right("00000" + o.StringHoldingAnInt, 7));
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8085880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档