我怎样才能得到所有产品的制造商?

How can i get the manufacturers from all products?

以下

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

returns

'System.Collections.Generic.IEnumerable' does not contain a definition for 'Manufacturers' and no extension method 'Manufacturers' accepting a first argument of type 'System.Collections.Generic.IEnumerable' could be found (are you missing a using directive or an assembly reference?)

虽然这个部分按预期工作,因为它获取找到的第一个产品的制造商。

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

我怎样才能得到所有产品的制造商?

你必须先把你的清单弄平。您可以使用 SelectMany 方法执行此操作。

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

根据您的代码,我假设每个产品都有一个制造商列表。基于此,很明显 Products.Manufactures 是制造商列表的列表(或一系列制造商的序列)。所以这就是为什么你必须扁平化你的列表。

您收到该错误是因为 Products 是某个 class 的集合,但您正试图访问特定的 属性,就好像它只是一个class.

的实例

您可以遍历列表:

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());