如何从类型化的linq查询行中找到基础db表名?

时间:2015-05-19 05:25:45

标签: vb.net linq database-schema datacontext gettype

在VB.net中,我希望从RunTime类型的Linq查询行确定底层数据库表名。我试图创建一个删除ListBoxes中的行的通用例程,其对象值是查询行。我需要使用DeleteOnSubmit()的实际表名。当然,如果我对表名进行硬编码,它的工作正常,但这就是我要避免的,这样我就可以对许多列表框使用单个例程。我只是挂钩KeyUp事件。这是我目前的代码:

Private Sub LbxMenuItems_KeyUp(sender As Object, e As KeyEventArgs) Handles LbxMenuItems.KeyUp, LbxCategories.KeyUp
    Dim lbx = DirectCast(sender, ListBox)
    If e.KeyCode = Keys.Delete Then
        Dim msg = "Delete " & lbx.SelectedItems.Count & " selected rows(s)?"
        If MsgBox(msg, MsgBoxStyle.YesNo + MsgBoxStyle.Exclamation) <> vbYes Then Exit Sub
        Dim lbxType As Type = lbx.SelectedItems(0).GetType
        For Each sel In lbx.SelectedItems
            dbh.MenuItems.DeleteOnSubmit(sel)    <--- "MenuItems" IS THE TBL NAME I NEED            Next
        dbh.SubmitChanges()
    End If
End Sub

例如: lbx.SelectedItems(0).GetType 生成全名“DataAdmin.MenuCategory”。 我正在寻找的表名是MenuCategories。 “dbh”是dataContext限定符。

我希望我能够很好地解释这一点,以便有人尝试提供帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

我是否理解您要查找的表名取决于用户点击删除的列表框?因此,列表框LbxMenuItems与表&#34; MenuItems&#34;相关联,而列表框LbxCategories与表&#34; MenuCategories&#34;?相关联如果是这种情况,由于Sub太小,为什么不只有2个不同的子,其中一个处理LbxMenuItems.KeyUp而另一个处理LbxCategories.KeyUp?然后你甚至可以根据需要自定义它们,比如说&#34; Dim msg =&#34;删除&#34; &安培; lbx.SelectedItems.Count&amp; &#34;例如,从菜单项?&#34;中选择的行。或者我错过了什么?