c# - 如何使用 Linq to objects 按固定数量对我的选择进行分组?

标签 c# .net linq linq-to-objects

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>

请帮助我避免 for 循环!

最佳答案

要按 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) .

关于c# - 如何使用 Linq to objects 按固定数量对我的选择进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9004090/

相关文章:

c# - 使用 LINQ 获取配对

c# - 我如何在 linq 中使用分组、不同和一起计数?

c# - 创建一个支持多个后端的 Web 应用程序

c# - 线程引发事件被处理程序阻止?

.net - 在 dotnet run 解决方案中设置默认项目

java - Collections.shuffle() 等同于 vb.net?

c# - 在 LINQ Select 中多次调用 First() 不好吗?

c# - 如何停止从 UnityAds 和 Vungle 自动获取/加载广告?

c# - 在 Outlook VSTO 加载项下显示带有 WPF 窗口的对话框

.net - Twitter API - 获取 GPS 点附近的推文