.NET 9 中 LINQ 新增功能实操

LINQ 介绍

语言集成查询 (LINQ) 是一系列直接将查询功能集成到 C# 语言的技术统称。 数据查询历来都表示为简单的字符串,没有编译时类型检查或 IntelliSense 支持。 此外,需要针对每种类型的数据源了解不同的查询语言:SQL 数据库、XML 文档、各种 Web 服务等。 借助 LINQ,查询成为了最高级的语言构造,就像类、方法和事件一样。

.NET 9 环境准备

需要体验 .NET 9 中 LINQ 的新增功能前提是需要安装 .NET 9 环境,安装 .NET 9 SDK 并且Visual Studio 2022需要更新至17.12版本。

CountBy方法

CountBy这个方法允许开发者按键来聚合集合中的元素,并计算每个键的出现次数。这使得计算某个数据集中特定元素的频率变得非常简单。

        public static void CountByExample()
        {
            var sourceText = "This is a test text. This is only a test. This is the best. This,This,This";

            // 统计每个单词出现的次数
            KeyValuePair<string, int> mostFrequentWord = sourceText
            .Split([' ', '.', ','], StringSplitOptions.RemoveEmptyEntries)
            .Select(word => word.ToLowerInvariant())
            .CountBy(word => word)
            .MaxBy(pair => pair.Value);

            Console.WriteLine($"最常见的词是:'{mostFrequentWord.Key}' 出现次数: {mostFrequentWord.Value}");
        }

输出结果:

AggregateBy方法

AggregateBy这个方法提供了更强大的聚合功能,开发者可以定义一个聚合逻辑(如求和、平均值等),并按键进行聚合。该方法在需要基于键对集合中的元素进行复杂计算时非常有用。

        public static void AggregateByExample()
        {
            (string id, int score)[] data =
                [
                ("0", 88),
                ("1", 5),
                ("2", 4),
                ("1", 10),
                ("6", 5),
                ("4", 10),
                ("6", 25)];

            // aggregatedData 是一个序列,包含按姓名分组并计算总分的元素
            var aggregatedData =
                data.AggregateBy(
                    keySelector: entry => entry.id,
                    seed: 0,
                    (totalScore, curr) => totalScore + curr.score
                    );

            foreach (var item in aggregatedData)
            {
                Console.WriteLine(item);
            }
        }

输出结果:

Index<TSource>(IEnumerable<TSource>) 方法

借助 Index<TSource>(IEnumerable<TSource>),可以快速提取可枚举项的隐式索引。 现在,可以编写代码(如以下代码片段)来自动为集合中的项编制索引。

        public static void IndexExample()
        {
            var lines = new List<string> { "First line", "Second line", "Third line" };
            foreach (var (index, line) in lines.Index())
            {
                Console.WriteLine($"Line {index + 1}: {line}");
            }
        }

输出结果:

参考文章

相关推荐
NiNg_1_2342 分钟前
Python的sklearn中的RandomForestRegressor使用详解
开发语言·python·sklearn
谢家小布柔5 分钟前
java中的继承
java·开发语言
黑色叉腰丶大魔王6 分钟前
《基于 Python 的网页爬虫详细教程》
开发语言·爬虫·python
l1384942745111 分钟前
Java每日一题(2)
java·开发语言·游戏
晓纪同学18 分钟前
QT创建一个模板槽和信号刷新UI
开发语言·qt·ui
WANGWUSAN6625 分钟前
Python高频写法总结!
java·linux·开发语言·数据库·经验分享·python·编程
刘不二31 分钟前
大模型应用—HivisionIDPhotos 证件照在线制作!支持离线、换装、美颜等
人工智能·开源
forNoWhat34 分钟前
java小知识点:比较器
java·开发语言
坐井观老天39 分钟前
在C#中使用资源保存图像和文本和其他数据并在运行时加载
开发语言·c#
代码中の快捷键1 小时前
java开发面试有2年经验
java·开发语言·面试