2013-08-29 2 views
0

Итак, у меня есть два столбца из базы данных, которые возвратят все продукты, которые находятся в моем магазине, и идентификаторы отдела, связанные с продуктом.Создание словаря или объекта ienumerable

Что я хочу сделать, это создать что-то, используя набор/словарь/ienumerable, чтобы, если я дам функции id продукта, она выплюнет идентификатор отдела. На данный момент у меня возникают некоторые проблемы, когда правильные декларации и нужна помощь в этом отделе.

Сначала у меня есть основа для отношений между Продуктом и Категории. Затем я хочу, чтобы ProductCategoryCollection возвращал коллекцию всех сопоставлений для каждого продукта и категории/отдела. Я застрял во второй части и не совсем уверен, куда идти, откуда я.

helper.GetProductToCategoryMatching() возвращает строки из базы данных.

public class ProductAndCategoryID 
{ 
    public ProductAndCategoryID(int product, int category) 
    { 
     this.productID = product; 
     this.categoryID = category; 
    } 

    public int productID; 
    public int categoryID; 
} 

public class ProductCategoryCollection : IEnumerable<ProductAndCategoryID> 
{ 
    public ProductCategoryCollection() 
    { 

    } 

    public List<ProductCategoryCollection> populate() 
    { 
     ShippingClassHelper helper = new ShippingClassHelper(); 
     DataSet ds = new DataSet(); 
     List<ProductCategoryCollection> list = new List<ProductCategoryCollection>(); 

     ds = helper.GetProductToCategoryMatching(); 

     foreach (DataRow row in ds.Tables[0].Rows) 
     { 

     } 

     return new List<ProductCategoryCollection>(); 
    } 
} 

ответ

0

Все, что вам нужно сделать сейчас, это создать ProductCategoryCollection объект внутри вашего цикла и добавить его в свой список.

public List<ProductAndCategoryID> populate() 
    { 
     ShippingClassHelper helper = new ShippingClassHelper(); 
     DataSet ds = new DataSet(); 
     List<ProductAndCategoryID> list = new List<ProductAndCategoryID>(); 

     ds = helper.GetProductToCategoryMatching(); 

     foreach (DataRow row in ds.Tables[0].Rows) 
     { 
      var pc = new ProductAndCategoryID(); 
      pc.ProductID = row[0]; 
      pc.CategoryID = row[1]; 

      list.Add(pc); 
     } 

     return list; 
    } 
+0

Я попытался это раньше но я не могу установить значения для 'ProductAndCategoryID', или, я думаю, мне нужно, чтобы я только возвращал две строки из базы данных? –

+0

Как выглядит таблица, которая возвращается? – Jeremy

+0

'ProductID'' CategoryID 'с соответствующими отношениями. Итак, продукт № 660 находится в категории 137, который вернет '660' | '137' –

0

Если я правильно понял ваш вопрос и ваши требования правильно, вы хотели бы получить словарь, сопоставляет ProductID к CategoryID, так что поиск может быть выполнено для CategoryID данного ProductID.

Если это хороший перевод вашей проблемы, это то, что вы можете сделать:

var productMap = new ShippingClassHelper() 
    .GetProductToCategoryMatching() 
    .Tables[0].Rows 
    .ToDictionary(row => (int)row[0], row => (int)row[1]); 

Это делает следующие предположения:

  • Поле «ProductID» является целым числом и первое поле в строке.
  • Поле «CategoryID» представляет собой целое число и второе поле в строке.
  • Ваш набор данных не содержит повторяющихся значений «ProductID».

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

var containsProduct660 = productMap.ContainsKey(660); 

Если вы хотите получить идентификатор категории для данного идентификатора продукта вы можете сделать:

var categoryIdForProduct660 = productMap[660]; 
Смежные вопросы