在case语句中比较表中的Int条目的最佳方法是什么?
使用SQL Server 2008 R2,Visual Basic Express和LINQ to SQL。
我尝试的代码不起作用:
Private Sub UpdateSetOpt()
Dim db = New ACEDataContext
Dim SRM = From q In db.Settings
Where q.SettingID = frmMain.CurrentSID
Select q.RollMethod
Select Case SRM
Case 1
rbStandard.Checked = True
Case 2
rbProfession.Checked = True
Case 3
rbSpecies.Checked = True
Case 4
rbRandom.Checked = True
Case Else
rbStandard.Checked = False
rbProfession.Checked = False
rbSpecies.Checked = False
rbRandom.Checked = False
End Select
End Sub
答案 0 :(得分:2)
SRM
不是Integer
,因为您的From
查询会返回一组项目。要获得第一个,请使用Single()
:
Dim SRM = (From q In db.Settings
Where q.SettingID = frmMain.CurrentSID
Select q.RollMethod).Single()
如果查询实际返回多个值,则上述代码将失败;您需要使用First
代替Single
。如果查询返回 no 值,则两者都将失败。在这种情况下,可以使用FirstOrDefault
代替(但在您的情况下可能不合适)。
除此之外,您的Select Case
是代码味道的标志。您应该创建一个包含所有复选框的数组,并使用整数映射到它:
Dim checks As CheckBox() = New CheckBox() { _
rbStandard, rbProfession, rbSpecies, rbRandom }
' Unset all checkboxes:
For Each check In checks
check.Checked = False
End For
If SRM > 0 AndAlso SRM <= checks.Length Then
checks(SRM - 1).Checked = True
End If
答案 1 :(得分:0)
SRM
不是int,而是IEnumerabe<int>
。
你想要第一个元素:
SELECT CASE SRM.FirstOrDefault():