LINQ return 值从字符串到 int 的转换失败

LINQ return value conversion failed from string to int

你好所以我在 vb.net 中有一个 DropDownBox,它是字段类型:MS SQL Server 2012 中的 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 中表现不一样。有什么建议吗?

尝试 Convert.ToInt32(lc.LINECODE) or maybe due to 10.1 try Convert.ToDecimal(lc.LINECODE). There are more conversion methods hereConvert class。

更新#1

似乎更好的解决方案是忘记数据库端的顺序。

而不是在调用 .ToList() 之前调用 .OrderBy(item => Decimal.Parse(item.LINECODE)).

在VB.NET中:.OrderBy(Function(item) Decimal.Parse(item.LINECODE))

更新#2

@Keyur PATEL 是对的。我还建议忘记数据库端的排序,但错过了需要额外调用 .ToList()

所以应该像这样工作:

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