循环遍历集合的各个部分

时间:2013-07-26 08:36:41

标签: c#

这是我正在创建一个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>',
}

似乎我需要某种while或递归循环来查看下一个项目是否与当前项目具有相同的日期并更改输出,但我似乎无法做到正确。

思想?

2 个答案:

答案 0 :(得分: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 :(得分: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);
    }
}