我有一个 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/