2013-07-26 172 views
2

下面的部分是一個循環我正在創建一個JSON對象集合:循環遍歷集合

var sb = new StringBuilder(); 
var list = DataAccess.Read.EventsByID(id); 
foreach (var spevent in list) 
{ 
    sb.AppendFormat("'{0}':'<a href=\"{1}\">{2}</a>',",spevent.StartTimeDt.ToString("MM-dd-yyyy"), spevent.Link, spevent.Title); 
} 

的缺陷是,如果我有相同日期的多個事件,我只得到最後一個因爲

window.eventscollection = { 
    '07-23-2013' : '<a href="#">Item One</a>', 
    '07-23-2013' : '<a href="#">Item Two</a>', 
} 

有兩個項目具有相同的對象名稱,並且不會重複。

正確的輸出將與同日的所有項目合併爲一個項目如下:

window.eventscollection = { 
    '07-23-2013' : '<a href="#">Item One</a><a href="#">Item Two</a>', 
} 

看來我需要某種同時或遞歸循環,看看下一個項目具有相同日期作爲當前項目並更改輸出,但我似乎無法做到正確。

想法?

+3

嘗試使用LINQ'GroupBy()',只是按日期時間組 – sll

+0

然後我將如何循環遍歷特定的日期範圍? – Wesley

回答

3

你可以組來自同一日期的項目爲

var sb = new StringBuilder(); 
var items = DataAccess.Read.EventsByID(id).GroupBy(p=>StartTimeDt.ToString("MM-dd-yyyy")); 

然後通過分組循環:

foreach (var item in items) 
{ 
    StringBuilder sb2 = new StringBuilder(); 
    foreach(var subitem in item) 
     sb2.Append(String.Format("<a href=\"{1}\">{2}</a>",subitem.Link,subitem.Title)); 
    sb.AppendFormat("'{0}':'{1}',",item.Key, sb2.ToString()); 
} 
1

首先,您需要GroupBy您的名單:

var sb = new StringBuilder(); 
var list = DataAccess.Read.EventsByID(id).GroupBy(e => e.StartTimeDt.Date); 

然後你可以循環內循環

foreach (var dt in list) 
{ 
    sb.AppendFormat("'{0}'",dt.Key.ToString("yyyy-MM-dd")) 
    foreach (var spevent in dt) 
    { 
     sb.AppendFormat("'<a href=\"{0}\">{1}</a>',",, spevent.Link, spevent.Title); 
    } 
}