2012-10-25 7 views
11

私のモデルの各アイテムを剃刀のビューでループしたいが、すべてのアイテムをまとめてグループ化したい。私は各グループをループしたいと思う。私のような何かをしたいかみそりでモデルコンテンツをループする

ID GroupNo GroupName 
1 1   Group1 
2 1   Group2 
3 1   Group3 
4 2   Group1 
5 2   Group2 
6 3   Group56 

:私はテーブルを持っている想像し

@foreach (var group in Model.GroupNo) { 
    <section> 
     <header>Group No is @group.GroupNo</header> 
     @foreach (var item in group) { 
      <p>GroupName: @item.GroupName</p> 
     } 
    </section> 
} 

は、だから私の出力は次のとおりです。

Group No is 1 
GroupName: Group1 
GroupName: Group2 
GroupName: Group3 
Group No is 2 
GroupName: Group1 
GroupName: Group2 
Group No is 3 
GroupName: Group56 

これは可能ですか?

おかげ

+0

実際にあなたの(一見して有効な)剃刀コードが期待しているものと一致するモデルデータ構造を実際に提供しようとしましたか? – millimoose

+0

GroupNoは間違いなくIEnumerable の権利ですか?あなたはそれにforeachをしているように私は尋ねている –

答えて

25

はい、これは、LINQのGroupByを使用して行うのは簡単です。あなたはIGroupingのキーを取得するためにgroup.Key代わりのgroup.GroupNoを用いることを除いて、書いたように

var groupModel = MyModelCollection.GroupBy(item => item.GroupNo).ToArray(); 
return View(groupModel); 

その後、単純にグループを反復処理::私はあなたがこのように移入したい@model IEnumerable<IGrouping<string, MyModel>>を使用するようにビューを変更することをお勧めしたい

@foreach (var group in Model) { 
    <section> 
     <header>Group No is @group.Key</header> 
     @foreach (var item in group) { 
      <p>GroupName: @item.GroupName</p> 
     } 
    </section> 
} 
+0

完璧に動作します! :)ありがとう非常にありがとう – Rodders

+0

それは素晴らしいですが、どのようにコントローラに戻すには? –

7

LINQはあなたが助けることができる

@model IEnumerable<Project1.Models.Group> 


@foreach (var item in Model.Select(i=>i.groupno).Distinct().ToList()) { 
    <tr> 
     <td> 
      <header>Group No is @item</header> 
      @foreach (var grpName in Model.Where(i => i.groupno == item).ToList()) 
      { 
       <p>GroupName: @grpName.groupName</p> 
      } 
     </td> 
    </tr> 
} 
+0

このロジックは私に多くの時間を節約しました..ありがとう! – Victor

-2
@{ 
    Layout = null; 
} 
<!DOCTYPE html> 
<html> 
<head> 
    <meta name="viewport" content="width=device-width" /> 
    <title>Index</title> 
</head> 
<body> 
    <div> 

     @{ 
      String[] name = {"Prashant", "Rishabh", "Zaheer", "Pratima", "Rahul"}; 
      int i = 1; 
      while (i <= 5) 
      { 
       foreach(var x in name) 
       { 
         <p>@i. @x</p> 
         i++; 
       }; 
       break; 
      } 
     } 
    </div> 
</body> 
</html> 

O/p- 
1. Prashant 

2. Rishabh 

3. Zaheer 

4. Pratima 

5. Rahul 
関連する問題