2017-03-03 13 views
0

如果我有像這樣的對象的列表:組記錄由物業來放在桌子

ID | First Name | Location | Division | Age | 
------------------------------------------------------------------ 
1   John    Building1   ISS    22 
2   Alex    Building1   ISS    30 
3   Chris    Building1   HR    41 
4   Mary    Building1   HR    25 
5   Monica   Building1   HR    46 
6   Ian    Building2   Accounting  37 
7   John    Building2   Accounting  32 
8   Justin   Building2   Sales   22 
9   Trevor   Building2   Sales   26 
10   Shelley   Building2   Sales   34 
11   Troy    Building1   Network   25 

這只是我有什麼的......樣品,我有更多的

我的目標是每次創建一個表格,如果位置不同該部門不同。

所以我想我的結果是:

表1

Building 1 - ISS // table header 
------------------------------------------------------------------ 
// table body 
John    Building1   ISS    22 
Alex    Building1   ISS    30 

表2

Building 1 - HR// table header 
------------------------------------------------------------------ 
// table body 
Chris    Building1   HR    41 
Mary    Building1   HR    25 
Monica    Building1   HR    46 

表3

Building 2 - Accounting // table header 
------------------------------------------------------------------ 
// table body 
Ian    Building2   Accounting    37 
John    Building2   Accounting    32 

表4

Building 2 - Sales // table header 
------------------------------------------------------------------ 
// table body 
Justin    Building2   Sales    22 
Trevor    Building2   Sales    26 
Shelley    Building2   Sales    34 

在我的視圖的頂部,我有:

@model List<ProjectName.Models.ViewModels.DetailsViewModel> 

我想只用1個foreach循環,因爲像我上面說有很多更多的位置和分區,我寧願不必爲每個不同的位置和分區創建一個foreach循環。

這怎麼辦?

任何幫助表示讚賞。

UPDATE

我在表中增加了一個額外的上方。這個人是Building1位置的一部分,但由於只有他一個人,所以我不想爲一個人生成1個整個表格,而是將他添加到Building1 ISS組中。

是否有某種條件聲明可以做到這一點?

更新2

ID | First Name | Location | Division | Age | 
------------------------------------------------------------------ 
1   John    Building1  Administration  40 
2   Melissa   Building1  Division1   32 
3   Sean    Building1  Division1   26 
4   Timothy   Building1  Division1   33 
5   Joe    Headquarters Administration  33 
5   Jason   Headquarters Staff    33 
5   Greg    Headquarters Staff    33 
5   Brett   Headquarters Staff    33 
1   Rob    Building2  Administration  40 
2   Nate    Building2  Division2   32 
3   Leslie   Building2  Division2   26 
4   Phil    Building2  Division2   33 

目標

我不關心總部的人..如果只有1師的人那就這樣吧。我只在乎關於building1和building2的人。

因此,我想羅布加入Building2 Division2組,並將John添加到Building1 Division1組。

這裏可以使用條件語句來檢查count和where語句來檢查位置名稱嗎?

回答

1

您需要查詢在LocationDivision上使用.GroupBy作爲關鍵字的記錄。

開始與代表你的觀點

public class MainVM 
{ 
    public string Title { get; set; } 
    public IEnumerable<ChildVM> Children { get; set; } 
} 
public class ChildVM 
{ 
    public string FirstName { get; set; } 
    public string Location { get; set; } 
    public string Division { get; set; } 
    public int Age { get; set; } 
} 

,並生成模型

var data = ... // your query to get the database records 

IEnumerable<MainVM> model = data.GroupBy(x => new { x.Location, x.Division }).Select(y => new MainVM() 
{ 
    Title = y.Key.Location + " - " + y.Key.Division, 
    Children = y.Select(z => new ChildVM() 
    { 
     FirstName = z.FirstName, 
     Location = z.Location, 
     Division = z.Division, 
     Age = z.Age 
    }) 
}); 
return View(model); 

視圖模型和視圖

@model IEnumerable<MainVM> 
.... 
@foreach(var table in Model) 
{ 
    <table> 
     <thead><tr><th colspan="4">@table.Title</th></tr></thead> 
     <tbody> 
      @foreach(var row in table.Children) 
      { 
       <tr> 
        <td>@row.FirstName</td> 
        .... // do you really need to repeat Location and Division which are already in the header? 
        <td>@row.Age</td> 
       </tr> 
      } 
     </tbody> 
    </table> 
} 

根據您的更新問題,你需要選擇所有ChildVM記錄,其中的MainVM.Children == 1.Count(),然後串聯到第一MainVM

IEnumerable<MainVM> model = data.GroupBy(... // as above 
model.First().Children = model.First().Children 
    .Concat(q.Where(x => x.Children.Count() == 1).SelectMany(x => x.Children)); 

,然後返回只有那些MainVM誰擁有

model = model.Where(x => x.Children.Count() > 1); 
return View(model); 
+0

你的回答可以完美運行。但是,我已經更新了我的問題。你能幫助嗎? –

+0

你指的是ID = 11,FirstName =「Troy」的行嗎? –

+0

正確,那就是我添加的那一行 –