18 LINQ 1 为啥要学LINQ

40 阅读1分钟

一、为什么学习LINQ?

让数据处理变得简单。

统计一个字符串中每个字母出现的频率(忽略大小写),然后按照从高到低的顺序输出出现频率高于2次的单词和其出现的频率。

var items = s.Where(c => char.IsLetter(c))//过滤非字母
    .Select(c => char.ToLower(c))//大写字母转换为小写
    .GroupBy(c => c)//根据字母进行分组
    .Where(g=>g.Count()>2)//过滤掉出现次数<=2
    .OrderByDescending(g => g.Count())//按次数排序
    .Select(g=>new { Char=g.Key,Count=g.Count()});

委托→lambda→LINQ:LINQ是由委托到lambda到LINQ演变而来的。

1、
IsOK(int i)
{
    return i>3&&<10;
}
items.Where(IsOK);


2、items.Where(i=> i>3&&<10);

2.委托是什么

1、委托是可以指向方法的类型,调用委托变量时执行的就是变量指向的方法。举例。

using System;

namespace asTest
{
    class Program
    {
        static void Main(string[] args)
        {
            D1 d = A;
            d();
            d = B;
            d();
            D2 d2 = Add;
            Console.WriteLine(d2(3, 5));
        }
        static void A()
        {
            Console.WriteLine("我是A");
        }
        static void B()
        {
            Console.WriteLine("我是B");
        }
        static int Add(int i,int j)
        {
            return i + j;
        }
    }
    //声明委托
    delegate void D1();
    delegate int D2(int i, int j);
}

2、.NET 中定义了泛型委托Action(无返回值)和Func(有返回值),所以一般不用自定义委托类型。举例。

Action a = F1;
a();

Func<int, int, int> f = Add;
Console.WriteLine(f(2,3));

Func<int, string, string> f1 = S;
Console.WriteLine(f1(6, "六"));

Action<string, int> a1 = A;
a1("六",6);


void F1()
{
    Console.WriteLine("我是F1!");
}

int Add(int a,int b)
{
    return a + b;
}

string S(int a,string b)
{
    return a + b;
}

void A (string a,int b)
{
    Console.WriteLine(a+b);
}