2017-09-14 88 views
0

你好,所以我必須在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

回答

1

嘗試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。 –