首页 > 代码库 > LINQ常用扩展方法
LINQ常用扩展方法
下面的方法都是IEnumerable<T>的扩展方法:
- Average计算平均值; Min最小元素;Max最大元素;Sum元素总和; Count元素数量;
- Concat连接两个序列;//Unoin all
- Contains序列是否包含指定元素;
- Distinct取得序列中的非重复元素;
- Except获得两个序列的差集;
- Intersect获得两个序列的交集;
- First取得序列第一个元素;
- Single取得序列的唯一一个元素,如果元素个数不是1个,则报错;!!!严谨的程序。
- FirstOrDefault 取得序列第一个元素,如果没有一个元素,则返回默认值;
int[] values1 = { 3, 5, 9, 8, 20 }; int[] values2 = { 9, 13, 9, 8 }; var e1 = values1.Intersect(values2);//Intersect()输出values1与values2两个集合的交集元素 foreach (var i in e1) { Console.WriteLine(i); }//输出9 8
int[] values1 = { 3, 5, 9, 8, 20 }; int[] values2 = { 9, 13, 9, 8 }; int i = values1.ElementAt(3);//序号为3的元素,从0开始数 Console.WriteLine(i);//输出8
1 int[] values1 = { 3, 5, 9, 8, 20 };2 int[] values2 = { 9, 13, 9, 8 };3 4 int i = values1.First();//Last()最后一个5 Console.WriteLine(i);//3
int[] values3 = {3}; int i = values3.Single(); //唯一一个,如果序列中有0个或者多于一个元素,否则报错 Console.WriteLine(i);//输出3
Linq只能用于范型的序列,IEnumerable<T>!!对于非范型,可以用Cast或者OfType IEnumerable的方法:
IEnumerable的方法:
Cast<TResult>:由于Linq要针对范型类型操作,对于老版本.Net类等非范型的IEnumerable序列可以用Cast方法转换为范型的序列。
ArrayList l;
IEnumerable<int> il = l.Cast<int>();
OfType<TResult>:Cast会尝试将序列中所有元素都转换为TResult类型,如果待转换的非范型序列中含有其他类型,则会报错。OfType则是只将序列中挑出指定类型的元素转换到范型序列中。
Linq的效率怎么样:(小数据量、对性能要求不高的环节用linq很方便,而且延迟加载机制降低了内存占用,比一般人写的程序效率都高)
1 DataTable dt = null; 2 //if (dt.Rows.Count != 1) 3 //{ 4 // throw new Exception("不止一条"); 5 //} 6 //DataRow row = dt.Rows[0]; 7 8 //改进之~ 9 //Cast用来将非泛型的的序列转换为泛型的序列10 //dt.Rows是非泛型的序列通过Cast<DataRow>()转化成泛型的序列11 //Single取得序列的唯一一个元素!12 DataRow row = dt.Rows.Cast<DataRow>().Single();
object[] values = { 3, 5, 9, 8, 10 }; //Cast<int>()将object数组转化为泛型的数组 Console.WriteLine(values.Cast<int>().Max());//输出10
1 object[] values = { 3, 5, 9, 8, 10,"aa"};2 //Console.WriteLine(values.Cast<int>().Max());//会报错,不能转换成功3 4 //将values数组中是int类型的元素转换成泛型数组,不是的元素排除在外5 Console.WriteLine(values.OfType<int>().Max());//输出10
1 object[] values = { 3, 5, 9, 8, 10,"aa"};2 3 //OfType是挑出符合类型的进行转换4 foreach (var i in values.OfType<string>())5 {6 Console.WriteLine(i);7 }//输出aa
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。