我正在尝试将带有动态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
答案 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。