首页 > 代码库 > LINQ常用扩展方法

LINQ常用扩展方法

下面的方法都是IEnumerable<T>的扩展方法:

  1. Average计算平均值; Min最小元素;Max最大元素;Sum元素总和; Count元素数量;
  2. Concat连接两个序列;//Unoin all
  3. Contains序列是否包含指定元素
  4. Distinct取得序列中的非重复元素
  5. Except获得两个序列的差集
  6. Intersect获得两个序列的交集
  7. First取得序列第一个元素
  8. Single取得序列的唯一一个元素,如果元素个数不是1个,则报错;!!!严谨的程序。
  9. 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