Unity3D C#中使用LINQ查询(与 SQL的区别)
前言:
学过SQL的一看就懂
LINQ代码很直观
但是,LINQ却又跟SQL完全不同
首先来看一下调用LINQ的代码
int[] badgers = {36,5,91,3,41,69,8}; var skunks = from pigeon in badgers where (pigeon != 36 && pigeon <50) orderby pigeon descending select pigeon + 5; var bears = skunks.Take(3); Debug.Log("Get your kicks on route {0}",weasels.Sum());
LINQ与SQL最大的不同
就在于SQL查询的是数据库表,而LINQ查询的是对象
也就是说,SQL查询的是集合,而LINQ查询的是可以储存的任何内容,可以是值、struct、对象等。
这就形成了最大的区别:SQL表没有顺序,而LINQ查询的内容是有顺序的
从代码行的不同
SQL语句把SELECT放在第一句
而LINQ将SELECT放在了最后一句
两者同样具有where,orderby等语句
LINQ并不只是查询并获取数据项
LINQ还提供了管理数据所需要的各种工具
例如上面代码的 select pigeon + 5;
作用为将每个数字加5后输出
类似地,还有LINQ定义的一些方法,如Count(),Min(),Max(),Sum(),Average()等
LINQ是什么原理呢
首先,需要循环处理整个对象
然后,将每个值与where条件作比较
最后,收集结果储存在代码中以供使用
因此LINQ代码的优缺点一目了然:
优点:C#把大量行为压缩到几行代码中,可以用很少的代码完成复杂的工作
缺点:性能相对不高。for手写代码比用LINQ代码速度快十几倍(网友测试结论)
注意:
LINQ查询会有“延迟计算”
也就是说,访问LINQ查询的结果之前并不会真正运行LINQ查询
这算是一种性能机制
当然,也可以使用ToList()告诉LINQ立即执行查询