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

LINQ常用扩展方法,布布扣,bubuko.com

时间: 10-28

LINQ常用扩展方法的相关文章

Javascript 常用扩展方法

这篇文章纯粹是为了保存这些方法,供以后翻阅,其实一直保存在 evernote 里面,但觉得还是放到对的地方会好点. 现在收录的很少,希望以后会慢慢增多. 数组扩展 contains,remove 扩展 1 function ArrayContains(array, obj) { 2 for (var i = 0; i < array.length; i++) { 3 if (array[i] === obj) { 4 return true ; 5 } 6 } 7 return false ;

LinQ 定义扩展方法3.1

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection; using System.Diagnostics; namespace ExtensionMethodDump { class Program { static void Main(string[] args) { var song = new { Artist = "Juss

WebAPi添加常用扩展方法及思维发散

WebAPi常用扩展方法 (1)获取所有键值对         /// <summary>         /// 获取所有键值        /// </summary>         /// <param name="request"></param>         /// <returns></returns>         public static Dictionary<string, str

LINQ与扩展方法

What LinQ是什么? 英文全称Language Integrated Query,中文翻译为语言集成查询.它是一组用于语言的扩展,它通过编写代码以查询数据库相同的方式操作内存数据. LINQ的查询操作是比较有特色也比较常用的,但它也有相关的增删改的操作. Why & How 遍历对象.sql语句用的好好的,为什么又引进LINQ? 或许是初学者,好不容易可以掌握sql语句进行增删改查的操作,或许是被固有的思维绑住,使得我们无法跳出圈子,去审视它的优缺点.sql语句肯定有它的缺点,我们先来看个

Linq之扩展方法

目录 写在前面 系列文章 扩展方法 总结 写在前面 上篇文章介绍了隐式类型,自动属性,初始化器,匿名类的相关概念,及通过反编译的方式查看了编译器帮我们做了那些事.本篇文章将介绍扩展方法的知识点,及如何定义,如何使用的相关内容. 系列文章 Linq之Lambda表达式初步认识 Linq之Lambda进阶 Linq之隐式类型.自动属性.初始化器.匿名类 扩展方法 扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像

EF下lambda与linq查询&amp;&amp;扩展方法

1. linq查询数据 WebTestDBEntities db = new WebTestDBEntities(); 1.1 linq查询所有列数据 var userInfoList = from u in db.UserInfo where u.ID == 10 select u; 1.2 linq查询部分列数据 var userInfoList = from u in db.UserInfo where u.ID >= 1 select new { Name = u.UserName, P

.net 开发常用扩展方法总结

1 using System; 2 using System.Collections.Generic; 3 using System.Data; 4 using System.IO; 5 using System.Linq; 6 using System.Reflection; 7 using System.Runtime.Serialization.Formatters.Binary; 8 using System.Text; 9 using System.Text.RegularExpres

C# 常用扩展方法

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace CommonSD { public static class MyExtensions { public static void DisplayDefiningAssembly(this object obj) // { //Console.WriteLine("{0} lives here:=> {

[转][C#]Linq 的扩展方法

public static class LinqEx { public static IEnumerable<TResult> LeftExcludingJoin<TSource, TInner, TKey, TResult>(this IEnumerable<TSource> source, IEnumerable<TInner> inner, Func<TSource, TKey> pk, Func<TInner, TKey> f