在LINQ to SQL中使用GetTable()。OrderBy()的正确方法

时间:2012-10-22 13:59:01

标签: vb.net linq-to-sql

我是LINQ的新手,我正在尝试将Linq to SQL表绑定到几个控件(treeview,textbox等)。我希望能够更改文本框字段并轻松地将这些更新保存回数据库。

我可以使用以下方法从数据库中获取数据:

    Private LinqDB As New DataContext(My.Settings.dbConnection)
    Property tblManufacturers As Table(Of dbManufacturers) _
        = LinqDB.GetTable(Of dbManufacturers)()

将内容绑定到控件非常简单。 TreeView填充了所有的ManufacturerNames,当我点击它时,它会填充TextBoxes进行编辑 问题是结果不符合我想要的树视图中的顺序 我希望有类似的东西:

    Property tblManufacturers As Table(Of dbManufacturers) _
        = LinqDB.GetTable(Of dbManufacturers)().OrderBy("ManufacturerName") 

会起作用,但是没有。

我知道我可以使用像

这样的东西
Dim ManufacturerQuery = From ManufacturerName In tblManufacturers Order By ManufacturerName 

但是将更改推回到数据库似乎更加困难。

编辑:所以,显然我需要停止懦弱,只是尝试一下......

Namespace Controls
    Public Class ManufacturerWarranty

        Private LinqDB As New DataContext(My.Settings.dbConnection)
        Property tblManufacturers As Table(Of dbManufacturers) = LinqDB.GetTable(Of dbManufacturers)()
        Property ManufacturerQuery = From m In tblManufacturers Order By m.ManufacturerName

        Public Sub New()
            InitializeComponent()
        End Sub

        Private Sub ManufacturerWarranty_Loaded(sender As Object, e As System.Windows.RoutedEventArgs) Handles Me.Loaded
            Me.DataContext = Me
        End Sub

        Private Sub TreeView1_MouseDoubleClick(sender As System.Object, e As System.Windows.Input.MouseButtonEventArgs) Handles TreeView1.MouseDoubleClick
            StackPanel1.DataContext = e.OriginalSource.DataContext
        End Sub


        Private Sub cmdSave_Click(sender As Object, e As System.Windows.RoutedEventArgs) Handles cmdSave.Click
            LinqDB.SubmitChanges()
        End Sub
    End Class
End Namespace

然后我将TreeView绑定到ManufacturerQuery而不是tblManufacturers。我的保存按钮仍可用于提交更改,即使它们是针对ManufacturerQuery而非tblManufacturers。

1 个答案:

答案 0 :(得分:1)

好的,也许你想要

Dim tblManufacturers As Table(Of dbManufacturers) _
    = LinqDB.GetTable(Of dbManufacturers)() _
        .OrderBy(Function(m) m.ManufacturerName)  

所以,承诺你做

Using linqDB As New DataContext(My.Settings.dbConnection)
    Dim tblManufacturers As Table(Of dbManufacturers) _
        = linqDB.GetTable(Of dbManufacturers)()

    -- change tblManufacturers.

    linqDB.SaveChanges()
End Using

我不会做的是在用户与GUI交互时保持上下文打开。同样地,除非我将数据显示给用户,否则我(可能)不会对数据进行排序。