Связывание нескольких элементов управления с одним запросом LINQ - PullRequest
1 голос
/ 13 августа 2010

У меня есть запрос LINQ, который я хочу выполнить и поместить результат в переменную или 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 ]

3 голосов
/ 13 августа 2010

Последний вариант в вашем примере - самый простой.

Он выполнит запрос один раз, прочитает его в память и использует представление в памяти для привязки к элементам управления

Вызов ToList() должен форсировать выполнение запроса один раз.Использование результирующего списка НЕ ​​должно повторять запрос, но загружать значения из коллекции в памяти.Вы уверены, что код, который вы запускаете, - это то, что у вас есть выше, и фактически выполняет запросы четыре раза?

2 голосов
/ 13 августа 2010

Попробуйте это:

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
...