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不具有相同的行为。任何建议?
尝试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()
我尝试这样做:'如果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)”的相同消息' –
@JoelJacobson稍长一点,但您可以尝试'ToList()'在排序之前,所以它首先将列表加载到内存中。结果是一个更长的,也许稍微难看的线,但可能工作:'在哪里lc.HIDDEN = 0选择新{WithLINECODE = lc.LINECODE})。ToList()。OrderBy(Function(lc)Decimal.Parse(lc .LINECODE))。ToList()'最后一个'ToList()'只有在你想返回一个列表的时候。 –
谢谢你与变化一起工作谢谢你Keyur Patel和Gabor。 –
什么是'LINECODE'列的数据库类型? – Fabio