其他分享
首页 > 其他分享> > CodeGo.net>我如何使用Linq对对象进行按固定数量的选择分组?

CodeGo.net>我如何使用Linq对对象进行按固定数量的选择分组?

作者:互联网

data.Select(object=> string.Format("<a>{0}</a>", object.LinkText))      
.Select(html => string.Format("<div>{0}</div>", html))    
.Aggregate((running, next) => running + next);

我有这个查询,基本上将一些对象变成html标记.我似乎无法实现的是,第二选择只能针对第一选择中的每个(固定数量)3个元素运行.我不会说这样的话:

<div><a>xxx</a><a>yyy</a><a>zzz</a></div>
<div><a>ååå</a>....</div>

请帮助我避免循环!

解决方法:

要按3分组,请使用以下LINQ查询:

    var data = new[] {"quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog"};
    var res = data
        .Select((s, i) => new { Link = string.Format("<a>{0}</a>", s), Index = i })
        .GroupBy(p => p.Index/3)
        .Select(g => string.Format("<div>{0}</div>", string.Join("", g.Select(v => v.Link))));
    foreach (var re in res) {
        Console.WriteLine(re);
    }

该程序的输出如下所示:

<div><a>quick</a><a>brown</a><a>fox</a></div>
<div><a>jumps</a><a>over</a><a>the</a></div>
<div><a>lazy</a><a>dog</a></div>

注意此代码如何使用string.Join而不是较慢的Aggregate.
当然,由于您使用其他一些对象而不是字符串,因此您需要将string.Format(“< a> {0}< / a>”,s)替换为string.Format(“< a> {0 }< / a>“,s.LinkText).

标签:linq-to-objects,linq,c,net
来源: https://codeday.me/bug/20191201/2083676.html