嵌套查询 MVC LINQ

4

我对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){
    <h3 class="page-header">
        @item
    </h3>

    //Table TAG INSERT Here: ID, Offer, Service
}

现在的问题是,我不知道如何根据视图中的服务(例如:剪、染、烫)从数据库中填充数据。

我正在考虑在我的控制器中按服务存储数据:

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

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

2个回答

3
你可以使用 .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<OfferVM> Offers { get; set; }
}

然后在控制器中

IEnumerable<ServiceVM> 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<ServiceVM>
@foreach (var service in Model)
{
    <h2>@service.Name</h2>
    foreach (var item in service.Offers)
    {
        <span>@item.ID</span>
        <span>@Html.DisplayFor(m => item.Offer)</span>
    }
}

经典的分组问题 - Luiz
非常感谢您,@Stephen Muecke。 - J4X

1

ViewBag是一个动态属性,您可以在其中插入任何内容,但是当您从ViewBag检索数据时,首先需要将其转换。

@foreach (var item in (List<PS>)ViewBag.services){
    <h3 class="page-header">
        @item
    </h3>

    //Table TAG INSERT Here: ID, Offer, Service
}

知道了,但你能详细说明一下 (List<PS>)ViewBag.Services 吗? - J4X
1
列表<PS> PS是您的业务类,首先在视图上声明命名空间以使用这些类。例如:@Using YourProjectName.WhereYourClassIs。 - Anurag Deokar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接