LINQ返回值转换从字符串到int失败

时间:2017-09-14 22:16:47

标签: vb.net entity-framework linq tsql sql-order-by

你好,所以我在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中表现不一样。有什么建议吗?

1 个答案:

答案 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}}