更改数据集的延迟执行

时间:2013-08-14 06:56:35

标签: c# linq deferred-execution

我希望在过滤视图时使用延迟执行来更新数据网格视图中的更改数据。目前我有一系列可以过滤的行,然后可以搜索过滤后的数据。我使用linq查询来过滤数据并搜索数据。我已经总结了我在下面的做法。

IEnumerable<SomeDataRowType> m_mainData =
  (select from someDataContext
   new SomeDataRowType {
     properties...
   }).ToArray();

IEnumerable<SomeDataRowType> m_filteredData =
  m_mainData.Where(r => r.SomeProperty == someValue);

IEnumerable<SomeDataRowType> m_searchedData =
  m_filteredData.Where(r => r.SomeProperty.Contains(someSearchTerm));

myDataGridView.DataSource = new SortableBindingList<SomeDataRowType>(m_searchedData.ToArray());

如果m_mainData数据集没有改变,现在这很有用。我可以清除搜索查询并回退到过滤查询,或删除它们,或者只应用搜索查询。不幸的是,如果m_mainData设置为DOES更改,那么m_filteredDatam_searchedData过滤器将在旧m_mainData数据集上执行而不是新更新的数据集。我有点理解为什么会这样,但我不知道我可以选择解决这个问题。

如果有任何不清楚的地方,我道歉。谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

要延迟m_mainDatam_filteredDatam_searchedData,只需删除顶部语句中的ToArray()

IEnumerable<SomeDataRowType> m_mainData =
  (select from someDataContext
   new SomeDataRowType {
     properties...
   });

但请注意,我强烈怀疑你的SortableBindingList<T>在内部填充了某种形式的列表:winforms / wpf / etc模型中的数据绑定基于IList - 并且{{{ 1}}建议与SortableBindingList<T>相关的自定义类。如果是这种情况,绑定列表 永远不会延迟 - 因此您可能根本不需要重新绑定。甚至更好:只是直接维护绑定列表 - 绑定列表的整个点是传播更改通知。