-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathLINQ.txt
executable file
·75 lines (70 loc) · 2.1 KB
/
LINQ.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
查询是否存在:Any、firstOrDefault、Count
3者中Any性能最高,直接属性时Count性能最低,导航属性时firstOrDefault性能最低
Linq
// 单序列操作
Where()
OfType()
Cast()
OrderBy() // 升序
ThenBy() // 升序,不能位于第一个排序
OrderByDescending() // 降序
ThenByDescending() // 降序
Select()
Take()
Skip()
TakeWhile()
SkipWhile()
Reverse()
DefaultEmpty() // 当序列为空时,添加一个默认值
Distinct() // 剔除重复元素
GroupBy() // 返回一个IEnumerable<IGrouping<TKey, TSource>>, 一个Key对应多个值
// 多序列操作
Intersect() // 两个列表的交集
Except() // 第一个列表不存在第二个列表中的元素
Concat() // 并集, 不剔除重复元素
Union() // 并集, 剔除重复元素
Zip() // 基于位置操作两个列表, 以短的为准(比如返回:(x, y)=> String.Format("{0}, {1}", x, y))
// 转换序列操作
ToArray();
ToList();
ToDictionary();
ToLookUp();
// 取元素
ElementAt();
ElementAtOrDefault();
First();
FirstOrDefault();
Last();
LastOrDefault();
Single();
SingleOrDefault();
// 返回标量值
Count();
LongCount();
Max();
Min();
Average()
Sum();
Aggregate(); // 返回自定义的聚合, 例如: array.Aggregation(0, (total, x) => total + (x * 2)); 0是初始值
Contains(); // 是否包含元素
Any(); // 是否存在满足表达式的元素, 无参数则判断序列是否有元素存在
All(); // 是否所有元素都满足表达式
// 静态方法
Enumerable.Empty(); // 创建一个空序列, 例如Enumerable.Empty<string>();
Range(); // 只能用于数字, 用来生成连续数字序列
Repeat(); // 同Range(), 只能用于数字, 不过是用于生成重复的数字
多线程
lock(obj){// ...}
等同于
Monitor.Enter(obj);
try{// ...}
finally{Monitor.Exit(obj);}
WaitHandle
Mutex WaitOne(); ReleaseMutex();
Semaphore new Semaphore(int leave, int total); WaitOne(); Release();
EventWaitHandle
AutoResetEvent WaitOne(); //WaitOne()后会自动Reset();
ManualResetEvent WaitOne(); Set(); Reset();
linq多线程:plingq查询
ParallelEnumerable:Enumerable的并行版本
AsParallel(普通linq调用该方法)