c# - 循环遍历集合的各个部分

标签 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 或递归循环来查看下一个项目是否与当前项目具有相同的日期并更改输出,但我似乎无法正确执行。

想法?

最佳答案

您可以将同一日期的项目分组

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());
}

关于c# - 循环遍历集合的各个部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17876697/

相关文章:

c# - 音频文件的独立存储不使用单独的点击事件

c# - 如何使用 nhibernate 和 LINQ 将多个连接(获取)添加到连接表?

c# - 如何在 C# 中对整数二维数组进行排序

c# - 如何在 .net Framework 4.6 上启用 Vector.IsHardwareAccelerated?

c# - ADAL token 获取异常

c# - 如何让窗体始终位于任务栏顶部

c# - Linq lambda foreach

c# - 帮助创建计划生成器

c# - 在 DataGridView 中显示导航属性的属性(二级属性)

c# - 标签存储 <div id ="test">可变内容</div>(带有html标签)带有html标签