2016-04-21 229 views
4

我是MVCLINQ的新手。目前我在項目上遇到困難,並決定發佈。嵌套查詢MVC LINQ

MVC-查看,我想實現

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 
} 

問題就來了,現在,我對如何從DB根據自己服務填充數據到視圖不知道(如:切工,顏色,彼爾姆)在查看

我想這樣做的根據在我的控制器服務中存儲數據:

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

我不知道我能推已經根據服務變成某種陣列,這樣我可以填充到視圖中的服務的數據?

回答

3

您可以通過Service使用.GroupBy()子句來將數據分組。通過創建視圖模型來表示要在控制器

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); 

在視圖中顯示

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; } 
} 

那麼什麼,並在視圖

@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> 
    } 
} 
+0

經典組問題 – Luiz

+0

非常感謝你@Stephen Muecke – J4X

1

ViewBag是一個動態屬性,您可以插入ViewBag的任何內容,但是當您從ViewBag檢索數據時,首先需要將其轉換。

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

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

呀理解開始,但你能不能詳細更多關於'(列表)ViewBag.Services'? – J4X

+1

列表 PS是你的商務類首先聲明命名空間視圖使用這些類Ex @Using YourProjectName.WhereYourClassIs那樣 –