LINQ返回值从字符串转换未能诠释

问题描述:

你好,所以我必须在vb.net一个DropDownBox这是场类型:的Varchar在MS SQL Server 2012中,并显示如下:LINQ返回值从字符串转换未能诠释

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) 因为我知道甲骨文工作正常,但在T-SQL不具有相同的行为。任何建议?

+0

什么是'LINECODE'列的数据库类型? – Fabio

尝试Convert.ToInt32(lc.LINECODE)或可能是由于10.1尝试Convert.ToDecimal(lc.LINECODE)Convert类有更多的转换方法here

更新#1

什么似乎是一个更好的解决办法是忘记在DB侧的顺序。

取而代之之前致电.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() 
+0

我尝试这样做:'如果lc.HIDDEN = 0 选择新建随着{ .LINECODE = lc.LINECODE })排序依据(功能(LC)Decimal.Parse(lc.LINECODE))ToList()' 但我得到︰LINQ to Entities does not recognized the method'System.Decimal Parse(System.String)' “Order By Convert.ToDecimal(lc.LINECODE)”的相同消息' –

+0

@JoelJacobson稍长一点,但您可以尝试'ToList()'在排序之前,所以它首先将列表加载到内存中。结果是一个更长的,也许稍微难看的线,但可能工作:'在哪里lc.HIDDEN = 0选择新{WithLINECODE = lc.LINECODE})。ToList()。OrderBy(Function(lc)Decimal.Parse(lc .LINECODE))。ToList()'最后一个'ToList()'只有在你想返回一个列表的时候。 –

+0

谢谢你与变化一起工作谢谢你Keyur Patel和Gabor。 –