.NET9 Alpha - LINQ 更新

作者:微信公众号:【架构师老卢】
2-4 8:25
25

概述:在最新的 .NET 9 Alpha 版本中,LINQ(语言集成查询)引入了强大的新方法,如 和 ,增强了数据操作的简单性和可读性。这些方法为常见任务提供了一种更直观的方法,例如根据特定键对元素进行计数和聚合,从而降低了复杂性。CountByAggregateBy计数者在 LINQ 中引入该方法之前,我们必须依靠 和 (或 ) 方法的组合来按键对元素进行分组,然后计算每个组的出现次数。CountByGroupBySelectCount.NET 9 之前using System; using System.Collections.Generic; using System.Linq; c

在最新的 .NET 9 Alpha 版本中,LINQ(语言集成查询)引入了强大的新方法,如 和 ,增强了数据操作的简单性和可读性。这些方法为常见任务提供了一种更直观的方法,例如根据特定键对元素进行计数和聚合,从而降低了复杂性。CountByAggregateBy

计数者

在 LINQ 中引入该方法之前,我们必须依靠 和 (或 ) 方法的组合来按键对元素进行分组,然后计算每个组的出现次数。CountByGroupBySelectCount

.NET 9 之前

using System;  
using System.Collections.Generic;  
using System.Linq;  
  
class Program  
{  
    static void Main()  
    {  
        // Define a list of users  
        var users = new List<User>  
        {  
            new User { Name = "Alice", Role = "Admin" },  
            new User { Name = "Bob", Role = "Member" },  
            new User { Name = "Charlie", Role = "Admin" },  
            new User { Name = "David", Role = "Member" },  
            new User { Name = "Eve", Role = "Guest" },  
            new User { Name = "Frank", Role = "Admin" }  
        };  
  
        // CountBy Role using GroupBy and Select  
        var roleCounts = users  
            .GroupBy(user => user.Role) // Group users by their roles  
            .Select(group => new { Role = group.Key, Count = group.Count() }); // Select the role and count for each group  
  
        // Print the results  
        foreach (var roleCount in roleCounts)  
        {  
            Console.WriteLine($"Role: {roleCount.Role}, Count: {roleCount.Count}");  
        }  
    }  
}  
  
// User class definition  
public class User  
{  
    public string Name { get; set; }  
    public string Role { get; set; }  
    // Add more properties if needed  
}

虽然这种方法很灵活,但它需要更多的代码。

使用 .NET 9

随着 .NET 9 的引入,可以使用更简洁、更直观的代码实现相同的操作。 通过在内部处理分组和计数来简化过程,直接返回一个集合,其中键是组,值是该组中元素的计数。CountByCountByKeyValuePairs

foreach (var roleCount in users.CountBy(user => user.Role))  
{  
    Console.WriteLine($"There are {roleCount.Value} users with the role {roleCount.Key}");  
}

输出将为:

There are 3 users with the role Admin
There are 2 users with the role Member
There are 1 users with the role Guest

AggregateBy

我们将向类引入一个新属性,比如说,它是一个整数。然后,我们将按用户角色聚合这些访问级别。UserAccessLevel

.NET 9 之前

在 之前,您通常会使用 with 来完成此任务。AggregateByGroupByAggregate

using System;  
using System.Collections.Generic;  
using System.Linq;  
  
class Program  
{  
    static void Main()  
    {  
        // Define a list of users  
        var users = new List<User>  
        {  
            new User { Name = "Alice", Role = "Admin", AccessLevel = 10 },  
            new User { Name = "Bob", Role = "Member", AccessLevel = 5 },  
            new User { Name = "Charlie", Role = "Admin", AccessLevel = 20 },  
            new User { Name = "David", Role = "Member", AccessLevel = 5 },  
            new User { Name = "Eve", Role = "Guest", AccessLevel = 1 },  
            new User { Name = "Frank", Role = "Admin", AccessLevel = 10 }  
        };  
  
        // Aggregate AccessLevel by Role using GroupBy and Aggregate  
        var accessLevelSumByRole = users  
            .GroupBy(user => user.Role) // Group users by their roles  
            .Select(group => new { Role = group.Key, TotalAccessLevel = group.Sum(user => user.AccessLevel) }); // Aggregate AccessLevel for each role  
  
        // Print the results  
        foreach (var roleAggregate in accessLevelSumByRole)  
        {  
            Console.WriteLine($"Total AccessLevel for role {roleAggregate.Role} is {roleAggregate.TotalAccessLevel}");  
        }  
    }  
}  
  
// User class definition  
public class User  
{  
    public string Name { get; set; }  
    public string Role { get; set; }  
    public int AccessLevel { get; set; }  
}

使用 .NET 9

通过引入 ,您可以更简洁地执行相同的操作。AggregateBy

  // AggregateBy AccessLevel using AggregateBy  
  var accessLevelSumByRole = users.AggregateBy(  
      user => user.Role,  
      seed: 0,  
      (currentTotal, user) => currentTotal + user.AccessLevel);  
  
  // Print the results  
  foreach (var roleAggregate in accessLevelSumByRole)  
  {  
      Console.WriteLine($"Total AccessLevel for role {roleAggregate.Key} is {roleAggregate.Value}");  
  }

输出将为:

Total AccessLevel for role Admin is 40
Total AccessLevel for role Member is 10
Total AccessLevel for role Guest is 1

虽然 LINQ 方法(如 )和第三方库(如 )提供了一组丰富的扩展功能,但这些方法正式包含在 .NET 9 Alpha 版本中标志着一个重要的里程碑。它标志着 Microsoft 致力于增强 LINQ 库本身,将这些强大且急需的功能直接集成到核心框架中,确保直接来自 .NET 生态系统的主要维护者的强大支持和优化CountByAggregateBySuperLinq Microsoft + 开源& Microsoft 设计

相关留言评论
昵称:
邮箱:
阅读排行