我怎样才能得到所有产品的制造商?
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());
以下
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());