如何数据绑定DbContext SqlQuery()导致WPF

时间:2012-10-04 16:59:21

标签: vb.net entity-framework dbcontext

我正在尝试将带有动态where子句的查询返回的结果绑定到WPF DataGrid。

使用Database.SqlQuery似乎没有Load()方法,也没有Local()来返回ObservableCollection。 因此我使用New ObservableCollection(Of Product)(q1)。 这是推荐的用法,还是我错过了什么?

使用DbSet.SqlQuery我发现无法获取数据。 这应该如何使用?

Dim _dbc As New AdventureWorksEntities

''Using DbSet
'Dim q = _dbc.Product
'q.Load()
'Dim r = q.Local
'grd.ItemsSource = r

Const sql = "select * from production.product WHERE name LIKE 'fla%' and ProductNumber LIKE '%0'"
'Using Database.SqlQuery
Dim q1 = _dbc.Database.SqlQuery(Of Product)(sql)
Dim r1 = New ObservableCollection(Of Product)(q1)
grd.ItemsSource = r1

''Using DbSet.SqlQuery
'Dim q2 = _dbc.Product.SqlQuery(sql)
''Dim r2 = ???
''grd.ItemsSource = r2

1 个答案:

答案 0 :(得分:2)

通过执行以下操作,您应该能够实现所需的目标。

' Load the products
_dbc.Products.SqlQuery(sql).ToList()

' Bind to all loaded products
grd.ItemsSource = _dbc.Products.Local

另请注意,Database.SqlQuery()的结果永远不会在上下文中跟踪,因此如果您想使用DbSet.SqlQuery()绑定到结果,则必须使用DbSet.Local

有关DbSet.Local实际包含的内容的详情,请参阅its documentation