循环遍历集合的各个部分
本文关键字:个部 遍历 集合 循环 | 更新日期: 2023-09-27 18:24:58
以下是我正在处理的创建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或递归循环来查看下一个项目是否与当前项目的日期相同,并更改输出,但我似乎做不好。
想法?
您可以将与相同日期的项目分组
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());
}
您首先需要在列表中添加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);
}
}