我有一个简单的方法来遍历集合并创建报告吗?

时间:2012-05-04 13:48:39

标签: c# linq

我有以下类型的数据:

class Content {
   public String RowKey ..
   public String Title
}

a collection: ICollection<Content> contentItems

集合的数据如下所示,其中第一列是RowKey,第二列是Title

1.0 Topic1
1.1 Some text for topic1
1.2 More text for topic1
2.0 Topic2 header
2.1 Some text for topic2
2.3 Some more text for topic2

我要做的是创建以下内容:

<h2>1 Topic1</h2>
<ul>
<li>1.1 Some text for topic1</li>
<li>1.2 More text for topic1</li>
</ul>
<h2>2 Topic2 header</h2>
<ul>
<li>2.1 Some text for topic2</li>
<li>2.3 Some more text for topic2</li>
</ul>

我可以想办法使用循环,临时变量等来做到这一点,但有没有办法在LINQ中做到这一点?我已经看到了LINQ可以做的一些事情,如果你真的知道如何使用它,它似乎可以做很多事情。不幸的是,我的知识只不过是使用LINQ从集合中获取有序数据。

1 个答案:

答案 0 :(得分:1)

以下代码将所需的html包装在body标签中,但您可以轻松地从此元素中提取内容。

private static void BuildHtml()
{
    var content = new List<Content>
                    {
                        new Content() { RowKey= "1.0", Title = "Topic1" },
                        new Content() { RowKey= "1.1", Title = "Some text for topic1" },
                        new Content() { RowKey= "1.2", Title = "More text for topic1" },
                        new Content() { RowKey= "2.0", Title = "Topic2 header" },
                        new Content() { RowKey= "2.1", Title = "Some text for topic2" },
                        new Content() { RowKey= "2.3", Title = "Some more text for topic2" }

                    };

    var html = new XElement("Body", content
        .GroupBy(x => x.RowKey.Split('.').First())
        .Select(
            y =>
            new List<XElement>
                {
                    new XElement("h2", y.First().RowKey.Split('.').First() + " " + y.First().Title,
                                    new XElement("ul", y.Skip(1).Select(z => new XElement("li", z.RowKey + " " + z.Title))))
                }));

    html.ToString();
}