你好,所以我在vb.net中有一个DropDownBox,它是MS SQL Server 2012中的字段Type:Varchar,显示如下:
1 - Info
10.1 - Testing
10.2 - Programs
2 - Modes
3 - Qualifications
....
但它以错误的顺序显示。这是我得到的代码:
Public Shared Function GetLineCodeList() As IEnumerable
Dim _Result As IEnumerable
_Result = (From lc As SLBLINECODE In DataManager.SlbContext.SLBLINECODES
Where lc.HIDDEN = 0
Order By lc.LINECODE
Select New With {
.LINECODE = lc.LINECODE,
.LINEDESCRIPTION = lc.LINECODE + " - " + lc.LINEDESCRIPTION
}).ToList()
Return _Result
End Function
所以我一直试图通过CInt做一个订单(lc.LINECODE) 因为我知道Oracle工作正常,但在T-SQL中表现不一样。有什么建议吗?
答案 0 :(得分:1)
尝试Convert.ToInt32(lc.LINECODE)
或尝试.ToList()
尝试Convert.ToDecimal(lc.LINECODE)
。 .OrderBy(item => Decimal.Parse(item.LINECODE))
类的转换方法here更多。
更新#1
似乎更好的解决方案是忘记数据库端的订单。
而是在致电.OrderBy(Function(item) Decimal.Parse(item.LINECODE))
之前致电.ToList()
。
在VB.NET中:_Result =
(
From lc As SLBLINECODE In DataManager.SlbContext.SLBLINECODES
Where lc.HIDDEN = 0
Order By lc.LINECODE
Select New With {
.LINECODE = lc.LINECODE,
.LINEDESCRIPTION = lc.LINECODE + " - " + lc.LINEDESCRIPTION
}
) _
.ToList() _
.OrderBy(Function(item) Decimal.Parse(item.LINECODE)) _
.ToList()
更新#2
@Keyur PATEL是对的。我还建议忘记数据库端的排序,但错过了需要额外调用{{1}}。
那么应该是什么工作:
{{1}}