1

次の種類のデータがあります。

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

a collection: ICollection<Content> contentItems

コレクションのデータは次のようになります。最初の列は RowKey で、2 番目の列は 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 は非常に多くのことができるように思えます。残念ながら、私の知識は、LINQ を使用してコレクションから順序付けられたデータを取得すること以上のものではありません。

4

1 に答える 1

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();
}
于 2012-05-04T14:43:12.970 に答える