c# - 如何将这段代码重写为LINQ?

标签 c# linq

我有以下非常丑陋的代码,我想用一些不错的LINQ重写它,但我无法弄清楚:

var folders = new List<string>();
string folderResult = "";

foreach (var parallelMeasurement in ParallelMeasurements)
{
    var folder = parallelMeasurement.Item1.Substring(0, parallelMeasurement.Item1.IndexOf("."));

    if (!folders.Contains(folder))
    {
        folders.Add(folder);
        folderResult += folder + ",";
    }
}

folderResult = folderResult.TrimEnd(',');

string valueResult = "";

foreach (var folder in folders)
{
    var views = ParallelMeasurements.Where(x => x.Item1.Substring(0, x.Item1.IndexOf(".")) == folder);

    var value = views.Sum(x => x.Item2.TotalSeconds);
    valueResult += value + ",";
}

valueResult = valueResult.TrimEnd(',');

File.WriteAllText(Paths.ParallelGroupedTrend, $"{folderResult}{Environment.NewLine}{valueResult}");


ParallelMeasurementsList<Tuple<string, TimeSpan>>,元组的内容例如是:

Actor.ActorUsers
Actor.ActorInformation
User.Edit


简而言之,我想基于字符串的第一部分,即句点之前的内容,汇总度量。

最佳答案

这应该怎么办?

ParallelMeasurements.Add(new Tuple<string, TimeSpan>("Actor.ActorUsers", TimeSpan.FromMilliseconds(150)));
ParallelMeasurements.Add(new Tuple<string, TimeSpan>("Actor.ActorInformation", TimeSpan.FromMilliseconds(200)));
ParallelMeasurements.Add(new Tuple<string, TimeSpan>("User.Edit", TimeSpan.FromMilliseconds(150)));

var folders =
    ParallelMeasurements
        .GroupBy(g => g.Item1.Substring(0, g.Item1.IndexOf(".", StringComparison.InvariantCulture)))
        .Select(s => new { Group = s.Key, Sum = s.Sum(a => a.Item2.Milliseconds) })
        .ToList();

var folderResult = string.Join(",", folders.Select(f => f.Group));
var valueResult = string.Join(",", folders.Select(f => f.Sum));

Console.WriteLine("{0}{1}{2}", folderResult, Environment.NewLine, valueResult);


打印输出

Actor,User
350,150

关于c# - 如何将这段代码重写为LINQ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35888719/

相关文章:

c# - 快速将字符串复制到字符数组

c# - 使用 LINQ 在两个日期和时间之间进行搜索

c# - Linq to Entities 中的 Expression.Coalesce

c# - 如何使用 LINQ 从列表中获取索引

c# - 用于设置对象属性的 Linq 表达式树是什么?

c# - LINQ - 删除 List<T> 中以任何顺序或位置包含数组中的一项的项目

c# - 我应该在 DDD 中执行多少实体和值对象的概念?

c# - 由于 System.Windows.EffectiveValueEntry 而未处理对象

c# - 如何使用 Expression 构建匿名类型?

c# - 如何将元组与条目的自定义比较器进行比较,但元组的默认比较器?