以下
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();
我如何拥有所有产品的制造商?
答案 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());