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 here 的 Convert
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()
你好所以我在 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 here 的 Convert
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()