2014-06-05 50 views
1

我有一些問題的看法在CSHTML頁.. 我已經這樣定義定製剃刀的ForEach查看

<table> 
<tr> 
<th>Type</th> 
<th>Name</th> 
</tr> 
@foreach (var item in Model) 
{ 
<tr> 
     <td> @Html.DisplayFor(modelItem => item.typeBook)</td> 
     <td> @Html.DisplayFor(modelItem => item.bookName)</td> 
<tr>  
} 
</table> 

和視圖

 Type | Name 
    Horror | Scary 
    Horror | Spooky 
    Jokes | Bean 

的foreach,但我想這樣的看法。 。

Type | Name 
Horror | Scary , Spooky 
Jokes | Bean 

這是我的視圖模型

public class BookViewModel 
    { 


     [DataMember] 
     public int IdBook { get; set; } 

     [DataMember] 
     [DisplayName("type Book")] 
     public string typeBook { get; set; } 

     [DataMember] 
     [DisplayName("book Name")] 
     [Required] 
     public string bookName { get; set; } 


    } 

的選擇到數據庫中,我使用LINQ精通

Expression<Func<Book, bool>> criteria = c => c.IdBook == (int)IdBook ; 
IOrderedEnumerable<BookViewModel> result = this.GetList(criteria).OrderBy(o => o.typeBook); 
return result.ToList<BookViewModel>(); 

任何人都可以有想法爲這個?任何參考,消化將有助於..謝謝!

+1

你最好的辦法wouold是讓已經有輸出的模型你想如何,然後使用該模型來建立表格。比你不會在你的視圖中與你的foreach循環和LINQ鬥爭。 – Complexity

+0

我認爲你的模型需要改變。你的模型是怎樣的? – kandroid

+0

你應該使用linq查詢來區分和groupby更多:http://stackoverflow.com/questions/20582391/linq-distinct-or-group-by-multiple-properties –

回答

1

而不是在剃刀視圖中定製或編寫任何邏輯,您應該將自定義ViewModel傳遞到您的視圖。 而且您可以使用GroupBy查詢從列表中創建自定義ViewModel字段。 視圖應該只包含渲染語法。

內部控制器更新方法與下面的代碼:

// books is your original model data 
var bookListViewModel = books.GroupBy(b => b.typeBook) 
           .Select(b => new BookViewModel() 
           { 
            type = b.Key, 
            name = string.Join(",", b.Select(book => book.bookName)) 
           }); 

所以,現在你會在BookViewModel,typeBook =「恐怖」和BOOKNAME =「可怕,鬼」,因爲你需要顯示。

因此在您的視圖中,您可以像使用一樣使用它。只需你現在就必須將ViewModel傳遞給你的視圖。

+1

這完全是我在上面評論中提出的。 – Complexity

+0

也許可以使用groupby如果只有2個值,我的意思是typeBook,nameBook,但如果像typeBook,Writer,NameBook這3個值,那就不能使用group。 – Name

+0

@ user3645707我沒有找到你,你能告訴我你想如何顯示數據。 –

0

你要實現你的查詢作爲group by Type當你在控制器中三場

分配模型

e.g. 

    var query = BookViewModel. 
       Orderby(x =>x.bookName). 
       GroupBy(x =>x.Type); 

進一步查詢

var query = BookViewModel. 
       Orderby(x =>x.bookName). 
       GroupBy(x =>x.Type, n => n.Writer);