Использование оператора Case с записью Int из таблицы - PullRequest
3 голосов
/ 15 апреля 2011

Каков наилучший способ сравнить запись Int из таблицы в операторе case?

Использование 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 ]

2 голосов
/ 15 апреля 2011

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
0 голосов
/ 15 апреля 2011

SRM в вашем случае это не int, а IEnumerabe<int>.

Вы хотите первый элемент:

SELECT CASE SRM.FirstOrDefault():
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...