C#中LINQ的使用知多少?LINQ常功能整理,源代码解析

2023年 12月 21日 91.9k 0

LINQ(Language-Integrated Query)是C#语言中的一个强大的查询技术,它提供了一种统一的查询语法,可以用于查询和操作各种数据源,包括集合、数据库、XML等。下面详细描述了LINQ的20个功能点,并提供了相应的源代码。

  • 查询集合中的所有元素:
  • int[] numbers = { 1, 2, 3, 4, 5 };
    
    var query = from num in numbers
                select num;
    
    foreach (var num in query)
    {
        Console.WriteLine(num);
    }
  • 使用条件过滤集合中的元素:
  • int[] numbers = { 1, 2, 3, 4, 5 };
    
    var query = from num in numbers
                where num % 2 == 0
                select num;
    
    foreach (var num in query)
    {
        Console.WriteLine(num);
    }
  • 对集合中的元素进行排序:
  • int[] numbers = { 5, 3, 1, 4, 2 };
    
    var query = from num in numbers
                orderby num
                select num;
    
    foreach (var num in query)
    {
        Console.WriteLine(num);
    }
  • 对集合中的元素进行分组:
  • string[] names = { "Alice", "Bob", "Charlie", "David", "Eve" };
    
    var query = from name in names
                group name by name[0];
    
    foreach (var group in query)
    {
        Console.WriteLine(group.Key);
        foreach (var name in group)
        {
            Console.WriteLine(name);
        }
    }
  • 对集合中的元素进行投影:
  • string[] names = { "Alice", "Bob", "Charlie", "David", "Eve" };
    
    var query = from name in names
                select name.Length;
    
    foreach (var length in query)
    {
        Console.WriteLine(length);
    }
  • 连接两个集合的元素:
  • string[] names1 = { "Alice", "Bob", "Charlie" };
    string[] names2 = { "David", "Eve", "Frank" };
    
    var query = from name1 in names1
                join name2 in names2 on name1[0] equals name2[0]
                select new { Name1 = name1, Name2 = name2 };
    
    foreach (var pair in query)
    {
        Console.WriteLine($"{pair.Name1}, {pair.Name2}");
    }
  • 使用LINQ查询数据库:
  • using (var dbContext = new MyDbContext())
    {
        var query = from user in dbContext.Users
                    where user.Age > 18
                    select user;
    
        foreach (var user in query)
        {
            Console.WriteLine(user.Name);
        }
    }
  • 使用LINQ查询XML文档:
  • XDocument doc = XDocument.Load("data.xml");
    
    var query = from element in doc.Descendants("book")
                where (int)element.Element("price") > 10
                select element.Element("title").Value;
    
    foreach (var title in query)
    {
        Console.WriteLine(title);
    }
  • 使用LINQ查询JSON数据:
  • string json = File.ReadAllText("data.json");
    var data = JsonConvert.DeserializeObject(json);
    
    var query = from person in data
                where person.Age > 18
                select person.Name;
    
    foreach (var name in query)
    {
        Console.WriteLine(name);
    }
  • 使用LINQ查询并转换结果:
  • int[] numbers = { 1, 2, 3, 4, 5 };
    
    var query = from num in numbers
                where num % 2 == 0
                select num * 2;
    
    foreach (var num in query)
    {
        Console.WriteLine(num);
    }
  • 使用LINQ查询返回匿名类型:
  • string[] names = { "Alice", "Bob", "Charlie", "David", "Eve" };
    
    var query = from name in names
                select new { Name = name, Length = name.Length };
    
    foreach (var item in query)
    {
        Console.WriteLine($"{item.Name}, {item.Length}");
    }
  • 使用LINQ查询返回自定义类型:
  • public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }
    
    List people = new List
    {
        new Person { Name = "Alice", Age = 20 },
        new Person { Name = "Bob", Age = 25 },
        new Person { Name = "Charlie", Age = 30 }
    };
    
    var query = from person in people
                where person.Age > 25
                select person.Name;
    
    foreach (var name in query)
    {
        Console.WriteLine(name);
    }
  • 使用LINQ查询返回集合:
  • int[] numbers = { 1, 2, 3, 4, 5 };
    
    var query = from num in numbers
                where num % 2 == 0
                select num * 2;
    
    List result = query.ToList();
    
    foreach (var num in result)
    {
        Console.WriteLine(num);
    }
  • 使用LINQ进行分页查询:
  • int pageNumber = 2;
    int pageSize = 10;
    
    var query = from product in dbContext.Products
                orderby product.Name
                select product;
    
    var page = query.Skip((pageNumber - 1) * pageSize).Take(pageSize);
    
    foreach (var product in page)
    {
        Console.WriteLine(product.Name);
    }
  • 使用LINQ进行聚合操作:
  • int[] numbers = { 1, 2, 3, 4, 5 };
    
    int sum = numbers.Sum();
    int max = numbers.Max();
    int min = numbers.Min();
    double average = numbers.Average();
    
    Console.WriteLine($"Sum: {sum}");
    Console.WriteLine($"Max: {max}");
    Console.WriteLine($"Min: {min}");
    Console.WriteLine($"Average: {average}");
  • 使用LINQ进行集合的交集操作:
  • int[] numbers1 = { 1, 2, 3, 4, 5 };
    int[] numbers2 = { 4, 5, 6, 7, 8 };
    
    var query = numbers1.Intersect(numbers2);
    
    foreach (var num in query)
    {
        Console.WriteLine(num);
    }
  • 使用LINQ进行集合的并集操作:
  • int[] numbers1 = { 1, 2, 3, 4, 5 };
    int[] numbers2 = { 4, 5, 6, 7, 8 };
    
    var query = numbers1.Union(numbers2);
    
    foreach (var num in query)
    {
        Console.WriteLine(num);
    }
  • 使用LINQ进行集合的差集操作:
  • int[] numbers1 = { 1, 2, 3, 4, 5 };
    int[] numbers2 = { 4, 5, 6, 7, 8 };
    
    var query = numbers1.Except(numbers2);
    
    foreach (var num in query)
    {
        Console.WriteLine(num);
    }
  • 使用LINQ进行集合的连接操作:
  • var query = from order in dbContext.Orders
                join customer in dbContext.Customers on order.CustomerId equals customer.Id
                select new { OrderId = order.Id, CustomerName = customer.Name };
    
    foreach (var result in query)
    {
        Console.WriteLine($"{result.OrderId}, {result.CustomerName}");
    }
  • 使用LINQ进行集合的逆序操作:
  • int[] numbers = { 1, 2, 3, 4, 5 };
    
    var query = numbers.Reverse();
    
    foreach (var num in query)
    {
        Console.WriteLine(num);
    }

    以上是20个常用的LINQ功能点的示例代码,它们展示了LINQ在C#中的强大查询能力和灵活性。通过使用LINQ,开发人员可以更加方便地进行各种数据操作和查询,提高代码的可读性和开发效率。

    相关文章

    JavaScript2024新功能:Object.groupBy、正则表达式v标志
    PHP trim 函数对多字节字符的使用和限制
    新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
    使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
    为React 19做准备:WordPress 6.6用户指南
    如何删除WordPress中的所有评论

    发布评论