嵌套查询MVC LINQ

我是MVCLINQ的新手。 目前我在项目上面临困难并决定张贴。

我希望实现的MVC-View

Cut ---------------------------------- 1 20% 2 40% Color ---------------------------------- 3 30% 4 50% Perm ---------------------------------- 5 10% 

这是我的数据表的一些示例

 ID Offer Service ------------------- 1 20% Cut 2 40% Cut 3 30% Color 4 50% Color 5 10% Perm 

我的控制器:

 var services = (from ps in db.PS select ps).Distinct().ToArray(); ViewBag.services = services; 

我的看法:

 @foreach (var item in ViewBag.services){  //Table TAG INSERT Here: ID, Offer, Service } 

问题来了,我不知道如何根据自己的服务(例如:Cut,Color,Perm)在视图中将数据从DB填充到视图中

我正在考虑根据我的Controller中的服务来存储数据:

 foreach (var i in services){ var servicesdata = (from ps in db.PS where ps.Service == i select ps).ToArray(); } 

我想知道我可以将已经根据服务的服务数据推送到某种数组中,以便我可以填充到视图中吗?

您可以使用.GroupBy()子句按Service对数据进行分组。 首先创建视图模型以表示要在视图中显示的内容

 public class OfferVM { public int ID { get; set; } [DisplayFormat(DataFormatString = "{0:P0}")] public float Offer { get; set; } // assumes you store this as float in the db } public class ServiceVM { public string Name { get; set; } public IEnumerable Offers { get; set; } } 

然后在控制器中

 IEnumerable model = db.PS.GroupBy(x => x.Service).Select(x => new ServiceVM() { Name = x.Key, Offers = x.Select(y => new OfferVM() { ID = y.ID, Offer = y.Offer }) }); return View(model); 

在视图中

 @model IEnumerable @foreach (var service in Model) { 

@service.Name

foreach (var item in service.Offers) { @item.ID @Html.DisplayFor(m => item.Offer) } }

ViewBag是一个动态属性,您可以插入ViewBag,但是当您从ViewBag检索数据时,首先需要转换它。

 @foreach (var item in (List)ViewBag.services){  //Table TAG INSERT Here: ID, Offer, Service }