一、为什么学习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);
}