2011-12-14 2 views
0

Вот мой типичный сценарий:Правильных подход с использованием коллекций с GridView управления ASP.NET C#

У меня есть много C# бизнес-объектов, которые более или менее соответствуют моей конструкции базы данных. У меня также есть коллекции этих объектов, которые я использую для привязки к gridviews. Каков наилучший способ объединить поля из обоих этих объектов в мой gridview (без использования данных или создания представления).

Предположим, что я хочу видеть сетку со следующими столбцами: Идентификатор продукта, Название продукта, Стоимость продукта, Доставка Название компании. Обычно я просто получаю свою коллекцию продуктов из базы данных и использую шаблон элемента для названия транспортной компании. Затем я получил бы ShippingCompanyID в событии rowdatabound и снова зашел в базу данных, чтобы получить название моей транспортной компании. Я ненавижу дважды ходить в базу данных, может кто-то меня обучит тому, как я должен подходить к этому?

Продукт класса

  • ProductID
  • Имя
  • Стоимость
  • ShippingCompanyID

пароходство Класс

  • Ши ppingCompanyID
  • Имя

ответ

1

Вы можете использовать присоединяется Linq для достижения результата желания.

var result = from prd in products 
     from cmp in companies 
     where prd.ShippingCompanyID == cmp.ShippingCompanyID 
     select new 
      { 
      ProductID=prd.ProductID, 
      ProductName=prd.Name, 
      Company=cmp.Name 
     }; 
+0

Спасибо AVD! Вы бы действительно подошли к этой проблеме? Вы предпочитаете работать с datatables вместо коллекций? Есть ли проблема с скоростью, использующая linq для объединения коллекций вместо того, чтобы присоединяться к таблице один раз в базе данных, а не в коде? Кроме того, этот способ заставляет вас дважды обращаться в базу данных, один раз для продуктов, снова для компаний. – stillsmallvoice

+0

@stillsmallvoice - Я предпочитаю присоединяться к таблице в базе данных, создавая представления или хранимые-proc. – adatapost

1

с помощью LINQ, предполагая, что products представляет собой набор типа Product и shippingCompanies представляет собой коллекцию типа ShippingCompany.

from p in products 
join s in shippingCompanies on p.ShippingCompanyID equals s.ShippingCompanyID 
select new { p.ProductID, p.Name, p.Cost, s.Name } 
1

В подобных случаях, мы на самом деле включают в себя название компании в классе, который привязан к сетке (продуктов) и объединения таблиц в базе данных, как правило, в представлении.

Таким образом, в коде нет дополнительной работы, и этот же вид может быть повторно использован в других сценариях, таких как создание отчетов.

Смежные вопросы