C# 筛选绑定列表时,绑定不会';行不通

C# 筛选绑定列表时,绑定不会';行不通,c#,entity-framework,C#,Entity Framework,在网格中,我使用绑定列表绑定数据: childBindingSource.DataSource = db.Child.Local.ToBindingList() .Where(child => selectedrow != null && child.MasterID == selectedro

在网格中,我使用绑定列表绑定数据:

childBindingSource.DataSource = 
               db.Child.Local.ToBindingList()
                             .Where(child => selectedrow != null 
                                             && child.MasterID == selectedrow.ID)
                             .ToList();
或不带过滤器:

childBindingSource.DataSource = db.Child.Local.ToBindingList();
如果我使用where表达式过滤绑定列表,保存数据不起作用,但我不会得到任何异常

有什么想法吗

获取子记录的行单击事件:

    private void gridView1_RowClick(object sender, RowClickEventArgs e)
    {
        selectedrow = gridView1.GetFocusedRow() as Master;

        if (selectedrow != null)
        {
            int id = selectedrow.ID;
            db.Child.Where(child => child.MasterID == id).Load();
        }


        childBindingSource.DataSource = db.Child.Local.ToBindingList();

    }

DbSet.Local
是一个
可观察的集合
,因此您可以使用
ToBindingList()
,与网格的数据绑定是一个平滑的操作

ToList
只创建了一个
列表
,数据绑定不传递列表中的添加和删除信息(不过我希望更新可以正常工作)

补救方法是过滤上下文加载到
Local
列表中的数据:

db.Child.Where(child => selectedrow != null 
                     && child.MasterID == selectedrow.ID).Load();
childBindingSource.DataSource = db.Child.Local.ToBindingList();

这意味着您必须为显示和更新的每一组子记录使用一个新的上下文。

什么是
ToBindingList
?使本地数据与网格的数据源保持同步。第二个LOC有效吗?是的。只是过滤数据会把一切都搞糟。您是否尝试在
Where
之后调用
ToBindingList
筛选器?其他信息:无法创建“lazyloading.Master”类型的常量值。在此上下文中仅支持基元类型或枚举类型。有什么想法吗?检查一下
selectedrow!=在查询外部为null,并使用变量
var id=selectedrow!=无效的选择了row.ID:0
并在查询中使用
ID
。干杯,但是筛选不起作用。在“我的详细信息”表格中,所有记录都被选中……也许你现在应该问一个新问题。我需要更多的细节来了解这里发生了什么。正如我所说的,每次都需要一个新的上下文。现在,您继续将记录添加到本地列表中。