2016-03-20 2 views
0

СледующихКак я могу получить производителей от всех продуктов?

model.Manufacturers = PagedData.Products.Manufacturers.Select(t => new Manufacturer { ManufacturerID = t.ManufacturerID, ManufacturerName = t.ManufacturerName }).AsEnumerable(); 

возвращает

«System.Collections.Generic.IEnumerable» не содержит определения «Производитель» и не метод расширения «Производитель» принимающего первый аргумент тип «System.Collections.Generic.IEnumerable» может быть найден ( у вас отсутствует директива по использованию или ссылка на сборку?)

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

var firstOrDefault = PagedData.Products.FirstOrDefault(); 
if (firstOrDefault != null) model.Manufacturers = firstOrDefault.Manufacturers.Select(t => new Manufacturer { ManufacturerID = t.ManufacturerID, ManufacturerName = t.ManufacturerName }).AsEnumerable(); 

Как я могу получить Производители всех продуктов?

ответ

1

Вы получаете эту ошибку, потому что Products - это коллекция определенного класса, но вы пытаетесь получить доступ к определенному свойству, как если бы это был только один экземпляр класса.

Вы можете итерацию по списку:

foreach(var product in PagedData.Products) 
{ 
    model.Manufacturers.AddRange(
     product.Manufacturers.Select(t => new Manufacturer 
               { 
                ManufacturerID = t.ManufacturerID, 
                ManufacturerName = t.ManufacturerName 
               })); 
} 

или придавить список с помощью LINQ:

model.Manufacturers = 
    PagedData.Products.SelectMany(p => p.Manufacturers 
             .Select(t => new Manufacturer 
                 { 
                  ManufacturerID = t.ManufacturerID, 
                  ManufacturerName = t.ManufacturerName}) 
             .AsEnumerable()); 
1

Прежде всего, вы должны сгладить свой список. Вы можете сделать это с помощью метода SelectMany.

model.Manufacturers = PagedData.Products 
           .SelectMany(product=>product.Manufacturers) 
           .Select(m => new Manufacturer 
           { 
            ManufacturerID = m.ManufacturerID, 
            ManufacturerName = m.ManufacturerName 
           }) 
           .AsEnumerable(); 

С вашего кода я предположил, что у каждого продукта есть список производителей. Исходя из этого, ясно, что Products.Manufactures является списком производителей (или последовательностью последовательностей производителей). Вот почему вы должны сгладить список.