我怎样才能从所有产品中获得制造商?

时间:2016-03-20 11:10:21

标签: c# entity-framework linq linq-to-entities

以下

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

我如何拥有所有产品的制造商?

2 个答案:

答案 0 :(得分:1)

您必须先列出您的清单。您可以使用SelectMany方法执行此操作。

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

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

答案 1 :(得分:1)

您收到该错误是因为Products是某个类的集合,但您尝试访问某个特定属性,就好像它只是该类的一个实例一样。 / p>

您可以遍历列表:

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