Как преобразовать этот SQL-запрос на основе строк, чтобы использовать Linq - PullRequest
2 голосов
/ 03 февраля 2011

У меня есть следующая подпрограмма (она работает), но ее сложно обновлять из-за используемых вручную строк:

Private Sub ListDefaults()
    Dim conn As New SqlConnection( _
    "server=bas047\AUTODESKVAULT;Database=DWGDetails;Integrated Security=SSPI")
    'Dim conn As New SqlConnection( _
    '"server=bas047\AUTODESKVAULT;Database=DWGDetails;Integrated Security=SSPI")
    Try
        'clear columns
        If Not Me.DataGridView1.DataSource Is Nothing Then
            Me.DataGridView1.Columns.Clear()
            Me.DataGridView1.DataSource = Nothing
        End If
        conn.Open()
        Dim cmd As SqlCommand = conn.CreateCommand()
        Dim DLcmd As SqlCommand = conn.CreateCommand()
        Dim ILcmd As SqlCommand = conn.CreateCommand()
        'Dim srctbl As String = String.Empty
        If RadioButton1.Checked = True Then 'A3
            shtsize = "A3"
            cmd.CommandText = "SELECT [AttributeName],[IsDefaultValue],[DefaultValue] FROM " & _
                Chr(34) & "DefaultValues(Borders SB-A3_993-5.2(block))" & Chr(34)
            srctbl = "DefaultValues(Borders SB-A3_993-5.2(block))"
        ElseIf RadioButton2.Checked = True Then 'A2
            shtsize = "A2"
            cmd.CommandText = "SELECT [AttributeName],[IsDefaultValue],[DefaultValue] FROM " & _
                Chr(34) & "DefaultValues(Borders SB-A2_992-5.2(block))" & Chr(34)
            srctbl = "DefaultValues(Borders SB-A2_992-5.2(block))"
        ElseIf RadioButton3.Checked = True Then 'A1
            shtsize = "A1"
            cmd.CommandText = "SELECT [AttributeName],[IsDefaultValue],[DefaultValue] FROM " & _
                Chr(34) & "DefaultValues(Borders SB-A1_991-5.2(block))" & Chr(34)
            srctbl = "DefaultValues(Borders SB-A1_991-5.2(block))"
        ElseIf RadioButton4.Checked = True Then 'A0
            shtsize = "A0"
            cmd.CommandText = "SELECT [AttributeName],[IsDefaultValue],[DefaultValue] FROM " & _
                Chr(34) & "DefaultValues(Borders SB-A0_990-5.2(block))" & Chr(34)
            srctbl = "DefaultValues(Borders SB-A0_990-5.2(block))"
        End If

        'Populate datagridview1
        da = New SqlDataAdapter(cmd.CommandText, conn.ConnectionString)
        ds = New DataSet
        da.Fill(ds, srctbl)

        DataGridView1.DataSource = ds.Tables(0)
        DataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.DisplayedCells)
        'should enable setting of the date and drawn by entries
        'Dim X As Integer
        'For X = 0 To DataGridView1.Rows.Count
        '    If UCase(DataGridView1.Rows(X).Cells(0).Value) = "DRAWN BY" Then
        '        MessageBox.Show("Found Drawn by!")
        '    End If
        'Next
    Catch ex As System.Data.SqlClient.SqlException
        MessageBox.Show("There was an error in executing the SQL." & vbLf & "Error Message:" & ex.Message, "SQL")
    Finally
        'cleanup and reset!
        conn.Close()
    End Try
End Sub

И я думаю, что это идеальный кандидат для Линка. Это то, что у меня до сих пор, кажется, работает:

Private Sub ListDefaultsMk1()
    Try
        Using db As New DWGDetailsDataContext
            If RadioButton1.Checked = True Then 'A3
                shtsize = "A3"
                DataGridView1.DataSource =
                From c In db.DefaultValues_Borders_SB_A3_993_5_2_block__s()
                Select New With {c.AttributeName, c.IsDefaultValue, c.DefaultValue}
            ElseIf RadioButton2.Checked = True Then 'A2
                shtsize = "A2"
                DataGridView1.DataSource =
                    From c In db.DefaultValues_Borders_SB_A2_992_5_2_block__s()
                    Select New With {c.AttributeName, c.IsDefaultValue, c.DefaultValue}
            ElseIf RadioButton3.Checked = True Then 'A1
                shtsize = "A1"
                DataGridView1.DataSource =
                    From c In db.DefaultValues_Borders_SB_A1_991_5_2_block__s()
                    Select New With {c.AttributeName, c.IsDefaultValue, c.DefaultValue}
            ElseIf RadioButton4.Checked = True Then 'A0
                shtsize = "A0"
                DataGridView1.DataSource =
                    From c In db.DefaultValues_Borders_SB_A0_990_5_2_block__s()
                    Select New With {c.AttributeName, c.IsDefaultValue, c.DefaultValue}
            End If
        End Using
    Catch ex As Exception
        MessageBox.Show("There was an error in executing the SQL." & vbLf & "Error Message:" & ex.Message, "SQL")
    End Try
End Sub

Следующий шаг моей программы - взять (отредактированные) значения из таблицы данных (в случае рукописного кода SQL, общий набор данных «ds») и заполнить другую таблицу, но я не могу понять, как сделать это с помощью Linq.

Кто-нибудь может предложить помощь?

Заранее спасибо,

Alex.

РЕДАКТИРОВАТЬ: Вот то, что я сократил на основе комментария

    Private Sub ListDefaultsMk1()
    Try
        Using db As New DWGDetailsDataContext
            If RadioButton1.Checked = True Then 'A3
                shtsize = "A3"
                DataGridView1.DataSource = (From c In db.DefaultValues_Borders_SB_A3_993_5_2_block__s Select c).ToList()
            ElseIf RadioButton2.Checked = True Then 'A2
                shtsize = "A2"
                DataGridView1.DataSource = (From c In db.DefaultValues_Borders_SB_A2_992_5_2_block__s Select c).ToList()
            ElseIf RadioButton3.Checked = True Then 'A1
                shtsize = "A1"
                DataGridView1.DataSource = (From c In db.DefaultValues_Borders_SB_A1_991_5_2_block__s Select c).ToList()
            ElseIf RadioButton4.Checked = True Then 'A0
                shtsize = "A0"
                DataGridView1.DataSource = (From c In db.DefaultValues_Borders_SB_A0_990_5_2_block__s Select c).ToList()
            End If
        End Using
    Catch ex As Exception
        MessageBox.Show("There was an error in executing the Linq2SQL Query!" & vbLf & "Error Message:" & ex.Message, "SQL")
    End Try
End Sub

1 Ответ

0 голосов
/ 10 февраля 2011

Linq2Sql и DataSets - это два совершенно разных зверя, и причина того, что вы можете использовать их в сетке, заключается в том, что сетка может использовать больше типов, чем просто набор данных.

Технически вы можете закрепить результат запроса linq, используяскажем, ToList(), а затем привязать список к сетке.После этого все изменения будут отражены в Списке, который вы можете преобразовать в другие форматы по своему усмотрению (вы не дали много информации о том, куда должны идти данные, кроме таблицы, таблицы в наборе данных (если это набор данных), таблицыв базе данных и т. д.).

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