我是asp.net的绝对初学者,我遇到了一个非常复杂的问题,具体来说我如何获取我刚刚从数据库获得的数据。下面是我的查询和处理数据的开始。
var brandslist = from brand in brandDB.brands
join brand_family in brandDB.brand_family
on brand.brand_family_id equals brand_family.bf_id
orderby brand_family.brand_family_name,
brand.priority,
brand.genre_id
select new
{
brand_family.brand_family_name,
brand.priority,
brand.roll_image
};
var viewModel = new BrandIndexViewModel{
Brands = brandslist.ToList()
};
我习惯用PHP做事,而不是asp这就是为什么我这么绝对难倒。我确实有一个以前的数据库调用,但我只从数据库中获取一件事,而在这里我试图从数据库中获取多个项目。我想我的问题是如何让我的视图类可以访问数据?
感谢所有帮助我的人,因为我确信这是一个相当基本的问题。
修改
以下是我在编译时收到的错误消息:
错误1无法将类型'System.Collections.Generic.List'隐式转换为'System.Collections.Generic.List'C:\ Inetpub \ wwwroot \ hcd \ hcd \ Controllers \ HomeController.cs 35 26 hcd
编辑2
确认我正在使用ASP MVC 2。
编辑3
这是我的品牌索引视图模型(但我已经看到它可能存在问题)
public class BrandIndexViewModel
{
public List<string> Priority { get; set; }
public List<string> FamilyName { get; set; }
public List<string> RollImage { get; set; }
public List<string> Brands { get; set; }
}
答案 0 :(得分:2)
问题的根源在于您的LINQ查询返回匿名类型,但您要分配给List<string>
的品牌。最终,你需要得到你想要的字符串。我将假设“brand_family_name”是您想要进入List<string> Brands
的数据。
var viewModel = new BrandIndexViewModel{
Brands = brandslist.Select(b => b.brand_family_name).ToList() // Or whichever property you want to use to populate List<string> Brands
};
答案 1 :(得分:1)
正如其他答案中所提到的,您没有在ViewModel的Brands
列表中指定您想要的内容(最合适的是brand.Name
)。发布您的brand
和brand_family
类可以澄清这一点。
如果我理解正确,您基本上需要在视图中显示Brands
列表。在这种情况下,将FamilyName
,Priority
,RollImage
和Brand
分组到一个对象中并将其列在ViewModel中的列表会更简洁:
public class BrandIndexViewModel
{
public List<BrandIndexItem> BrandIndexItems { get; set; }
}
public class BrandIndexItem
{
public string Priority { get; set; }
public string FamilyName { get; set; }
public string RollImage { get; set; }
public string Brand { get; set; }
}
在这种情况下,您无需执行Select
即可填充每个列表。相反,您可以将查询结果直接投影到ViewModel上。以下是使用join的代码:
var viewModel = new BrandIndexViewModel
{
BrandIndexItems =
(from brand in brandDB.brands
join brand_family in brandDB.brand_family
on brand.brand_family_id equals brand_family.bf_id
orderby brand_family.brand_family_name,
brand.priority,
brand.genre_id
select new BrandIndexItem
{
FamilyName = brand_family.brand_family_name,
Priority = brand.priority,
RollImage = brand.roll_image,
Brands = brand.name // ?
}).ToList()
}
此外,您提到使用数据库,但是您没有提到您是否正在使用ORM,例如EF或LINQ-to-SQL。如果您使用其中一个,如果您可以发布模型的屏幕截图,那将非常有用。同时,根据您的代码,您似乎在brand_family
和brand
之间存在一对多关系,因此如果您使用的是ORM,则可能具有导航属性{{1 }}。在这种情况下,您的LINQ查询中不需要brand.brand_family
:
join
答案 2 :(得分:0)
我将假设您正在使用ASP.NET MVC。
要从视图中访问brandslist变量,请使用model参数从控制器传递。例如:
ActionResult ListAllBrands()
{
var brandslist = from brand in brandDB.brands
join brand_family in brandDB.brand_family
on brand.brand_family_id equals
brand_family.bf_id
orderby brand_family.brand_family_name,
brand.priority,
brand.genre_id
select new
{
brand_family.brand_family_name,
brand.priority,
brand.roll_image
};
return View("List", brandslist);
}
然后在您看来,将会有一个名为“Model”的变量,它将包含此值。然后,您可以使用for / each循环遍历.ASPX代码中的每个记录。