您好我正在尝试将LINQ查询结果转换为对象列表,我似乎做错了,因为我无法访问每个对象的属性.这是我的代码:
List<Object> productList = new List<Object>();
var products = (from p in Products
join s in SubCategories on p.SubcatId equals s.SubCatId
join b in Brands on p.BrandId equals b.BrandId
select new
{
Subcategory = s.SubCatName,
Brand = b.BrandName,
p.ProductName,
p.ProductPrice
}).Where(x => x.Subcategory == subcategory);
foreach (var product in products)
{
productList.Add(product);
}
foreach (var produs in productList){
Console.WriteLine(produs.ProductName);
}
Run Code Online (Sandbox Code Playgroud)
当我尝试这样做时,我收到一条错误消息:
Object does not contain a definion for ProductName
Run Code Online (Sandbox Code Playgroud)
所有其他领域都是如此
阿尔多,如果我尝试这样做:
Console.WriteLine(produs);
Run Code Online (Sandbox Code Playgroud)
我得到了包含每个字段数据的表格
我已经为LINQPAD上的测试运行了它,它在visual studio中也不起作用.我做错了什么?
这就是问题:
List<Object> productList = new List<Object>();
Run Code Online (Sandbox Code Playgroud)
你宣称它是一个List<object>,这意味着你以后写这个:
foreach (var produs in productList)
Run Code Online (Sandbox Code Playgroud)
然后produs隐式输入为object.
最简单的方法就是使用ToList()而不是将结果复制到列表中:
var products = (from p in Products
join s in SubCategories.Where(x => x.SubCatName == subcategory)
on p.SubcatId equals s.SubCatId
join b in Brands on p.BrandId equals b.BrandId
select new {
Subcategory = s.SubCatName,
Brand = b.BrandName,
p.ProductName,
p.ProductPrice
}).ToList();
Run Code Online (Sandbox Code Playgroud)
请注意,我已尽早移动了子类别名称过滤器 - 在加入后无需执行此操作.将ToList()在结束通话将意味着结果是一个List<T>地方T是你的匿名类型.
然后你可以使用:
foreach (var product in products)
{
Console.WriteLine(produs.ProductName);
}
Run Code Online (Sandbox Code Playgroud)