好的,我所拥有的是wpf中的数据网格,我希望使用实体框架绑定到linq查询的结果。例如,假设我有一个产品列表,我想只显示待售产品:
var itemsOnSale = from item in context.products
where item.onSale == true
select item;
context.products.Load();
productViewSource.Source = itemsOnSale.ToList();
但是这里有一个问题:我还希望能够直接在datagridview中添加/编辑销售的产品,并将更改保存到数据库中。我该怎么做呢?
提前致谢。
答案 0 :(得分:3)
将查询绑定到DataGrid
的最佳方法之一是执行以下操作:
var itemsOnSale = from item in context.products
where item.onSale == true
select item;
itemsOnSale.Load();
productViewSource.Source=context.products.Local;
从此link:
Load
是IQueryable
上的新扩展方法,会导致该问题 要重复的查询结果,在EF中等于 将结果具体化为对象并将其添加到DbContext
在Unchanged
州
Local
属性会为您提供ObservableCollection<TEntity>
包含当前的所有Unchanged
,Modified
和Added
个对象 由DbContext
跟踪给定的DbSet
。当新对象进入DbSet
(通过查询,DbSet
。Add
/Attach
等),它们会出现在ObservableCollection
。当一个对象从DbSet中删除时 也将从ObservableCollection
中删除。添加或删除 从ObservableCollection也将执行相应的Add
上的Remove
/DbSet
。因为WPF本身支持绑定到ObservableCollection
没有额外的代码需要两个 方式数据绑定完全支持WPF排序,过滤等。
现在要在DataGrid
上保存这些更改,您唯一需要做的就是创建一个方法或command调用您的上下文的SaveChanges
方法:
private void SaveProductChanges()
{
context.SaveChanges();
}