将Case语句与表中的Int条目一起使用

时间:2011-04-15 16:46:43

标签: vb.net linq linq-to-sql case

在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

2 个答案:

答案 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():