我希望运行LINQ查询并将结果放入var或IQueryable中。但是,我将结果绑定到多个(4到10)控件,只希望查询运行一次。
这是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;
答案 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