将多个控件数据绑定到单个LINQ查询

时间:2010-08-13 19:45:39

标签: c# winforms linq data-binding controls

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

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

这是ADO.NET时代的简单派。如何使LINQ查询运行一次并仍然数据绑定到多个控件?

伪代码:

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;

2 个答案:

答案 0 :(得分:3)

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

这将执行一次查询,将其读入内存,并使用内存表示绑定到控件

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

答案 1 :(得分:2)

试试这个:

var result = from c in dc.whatevers select c;
List<whatevers> resultList = result.ToList(); // Query runs here

ddlItem1.DataSource = new List<whatevers>(resultList); // Copy of the list
ddlItem2.DataSource = new List<whatevers>(resultList); // Copy of the list
ddlItem3.DataSource = new List<whatevers>(resultList); // Copy of the list