Linq扩展方法

如果要扩展LINQ查询方法集,只需要为IEnumerable扩展方法。

第一种:扩展聚合方法,类似已有python基础教程的Max、Min,可以给具体类型扩展,也可以给泛型扩展。

using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;

namespace ConsoleApp4
{
    class Program
    {
        static void Main(string[] args)
        {
            var numbers1 = new double[]{ 1.9, 2, 8, 4, 5.7, 6, 7.2, 0 };

            var query1 = numbers1.Median();

            Console.WriteLine("double: Median = " + query1);
            
            var numbers2 = new int[] { 4, 5, 6, 8, 0 };
            var query2 = numbers2.Median();

            Console.WriteLine($"int:Median ={query2}");

            var str1 = new string[] { "ab", "abc", "abcde", "abcedfs" }; ;
            var query3 = str1.Median(x => x.Length);

            Console.WriteLine($"string:{query3}");
        }
     
    }

    public static class LINQExtension
    {
        public static double Median(this IEnumerable<double> source)
        {
            if(source.Count()==0)
            {
                throw new InvalidOperationException("无法计算中位数");
            }

            var sortedList = source.OrderBy(x => x);

            int itemIndex = (int)sortedList.Count()/2;

            // 索引从0开始,itemIndex总是偏大
            if(sortedList.Count()%2==0)
            {
                return (sortedList.ElementAt(itemIndex) + sortedList.ElementAt(itemIndex - 1)) / 2;
            }
            else
            {
                return sortedList.ElementAt(itemIndex);
            }
        }
       
        //Int类型重载求中位数
        public static double Median(this IEnumerable<int> source)
        {            
            return source.Select(x => Convert.ToDouble(x)).Median();           
        }

        //泛型,需传入选择器
        public static double Median<T>(this IEnumerable<T> source,Func<T,double> selector)
        {
            return source.Select(x => selector(x)).Median();
        }       
    }    
}

第二中:扩展返回集合的方法,类似Where、Orderby

 public static class LINQExtension
    {
        public static IEnumerable<T> AlternateElements<T>(this IEnumerable<T> source)
        {
            List<T> list = new List<T>();

            int i = 0;

            foreach (var item in source)
            {
                if (i % 4 == 2)
                {
                    list.Add(item);
                }
            }
            return list;           
        }
    }

量变会引c#教程起质变。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LINQ(Language Integrated Query)是.NET Framework的一种语言集成查询,它允许我们在C#或VB.NET代码中使用SQL类似的语法来查询数据。LINQ扩展方法是一种在LINQ查询中使用的方法,它们可以用于对数据进行排序、筛选、分组和投影等操作,以及执行聚合函数。 下面是几个LINQ扩展方法的应用实例: 1. Where方法:筛选符合条件的元素 ```csharp List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6 }; IEnumerable<int> result = numbers.Where(n => n % 2 == 0); ``` 2. OrderBy方法:按照指定的方式排序 ```csharp List<int> numbers = new List<int> { 6, 2, 4, 1, 5, 3 }; IEnumerable<int> result = numbers.OrderBy(n => n); ``` 3. GroupBy方法:按照指定的字段进行分组 ```csharp List<Person> people = new List<Person> { new Person { Name = "Alice", Age = 25 }, new Person { Name = "Bob", Age = 30 }, new Person { Name = "Charlie", Age = 25 }, new Person { Name = "Dave", Age = 30 } }; IEnumerable<IGrouping<int, Person>> result = people.GroupBy(p => p.Age); ``` 4. Select方法:对查询结果进行投影 ```csharp List<Person> people = new List<Person> { new Person { Name = "Alice", Age = 25 }, new Person { Name = "Bob", Age = 30 }, new Person { Name = "Charlie", Age = 25 }, new Person { Name = "Dave", Age = 30 } }; IEnumerable<string> result = people.Select(p => p.Name); ``` 这些方法只是LINQ扩展方法中的一部分,它们的应用可以大大简化我们对数据的处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值