我有一张桌子,PK是字符串我不能得到最后一行
当我使用order by code desc
9999 不正确
73858 是正确的
请帮助我T__T
我来自泰国抱歉,如果语言不正确
=============================================== ======================== 这个问题由grek40解决了。非常感谢
var lastrow = db.table.OrderByDescending(x => x.Code.Length).ThenByDescending(x => x.Code).FirstOrDefault()。Code;
答案 0 :(得分:1)
由于您的Code
- 属性是字符串值,因此使用字符串算术比较9999
更大73858
,因为它始于9
。你想要的是数字算术,所以首先将你的字符串转换为数字。遗憾的是,您无法在EF中使用int.TryParse
或Convert.ToInt32
,因此您首先要坚持将查询转换为IEnumerable
:
var query = myQuery.AsEnumerable();
现在您可以转换每个字符串并获取实际的最后一行
var lastRow = query.OrderByDescending(o => Convert.ToInt32(o.Code)).FirstOrDefault().Code
这意味着你必须将所有数据都存入内存才能获得最大的价值,当你有很多行时可能会出现问题。
无论如何,正如其他人已经指出的那样,您应该考虑使用允许这种搜索行为的数据类型。然后你可以从一开始就轻松避免这些情况。
答案 1 :(得分:0)
最好的解决方案是在DB中使用正确的类型,即如果Code实际上是Int为什么它存储为String?作为一种解决方法,您可以按Convert.ToInt32(代码)进行排序。
答案 2 :(得分:0)
如果您的字符串至少格式良好(周围没有空格),您可以尝试先获取最长的代码,然后再获取最长代码中的最大代码。
db.Entries
.OrderByDescending(x => x.Code.Length)
.ThenByDescending(x => x.Code)
.FirstOrDefault();
或者在SQL中使用排序
将最高代码带到前面order by LEN(code) desc, code desc