c# - 将多个控件数据绑定(bind)到单个 LINQ 查询

标签 c# winforms linq data-binding controls

我有一个 LINQ 查询,我希望运行并将结果放入 var 或 IQueryable。但是,我将结果绑定(bind)到多个(4 到 10 个)控件并且只希望查询运行一次。

  • 当我将结果放入所有数据源值时,查询会针对每个控件和控件(例如组合框)运行,只要其中任何一个发生更改,就会更改所选值以相互匹配。
  • 当我将控件数据绑定(bind)到 result.ToList() 或类似的东西时,这解决了同步问题(即它们按照应有的方式独立运行),但查询仍然为每个控件运行一次。

这在 ADO.NET 时代是轻而易举的事。如何使 LINQ 查询运行一次并仍然数据绑定(bind)到多个控件?

伪代码:

var result = from c in dc.whatevers select c;
ddlItem1.DataSource = result;
ddlItem2.DataSource = result;
ddlItem3.DataSource = result;

还有:

var result = from c in dc.whatevers select c;
ddlItem1.DataSource = result.ToList();
ddlItem2.DataSource = result.ToList();
ddlItem3.DataSource = result.ToList();

还有:

List<whatever> result = (from c in dc.whatevers select c).ToList();
ddlItem1.DataSource = result;
ddlItem2.DataSource = result;
ddlItem3.DataSource = result;

最佳答案

示例中的最后一个选项是最简单的。

这将执行一次查询,将其读入内存,并使用内存中的表示形式绑定(bind)到控件

调用 ToList() 应该强制查询执行一次。使用结果列表不应重复查询,而应从内存集合中加载值。您是否确定您正在运行的代码既是上面的代码又实际运行了四次查询?

关于c# - 将多个控件数据绑定(bind)到单个 LINQ 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3480213/

相关文章:

c# - 如何在提供 IQueryable 输出的 linq 查询中使用 Func

c# - 如何将上传的文件从javascript发送到MVC中的 Controller ?

c# - Silverlight 中动态 WCF 客户端代理的解决方案?

C# anchor 属性似乎不起作用

winforms - 订阅表单中所有控件的鼠标事件

字典 <> 中的 C# linq

c# - Linq 搜索不返回所有条目

C# 使用 linq 连接两个 Collection<string> 并获得 Collection<string> 结果

c# - 使用规范模式

c# - 将数字代码复制到剪贴板并粘贴到 Excel,无需将其格式化为数字