Linq是Language Integrated Query的简称,它是微软在.NET Framework 3.5里面新加入的特性,用以简化查询查询操作。以下主要介绍C#中Linq的AsEnumeralbe、DefaultEmpty和Empty操作符。
AsEnumerable
操作符可以将一个类型为IEnumerable
的输入序列转换成一个IEnumerable
的输出序列,其主要用于将一个实现了IEnumerable
接口的对象转换成一个标准的IEnumerable
接口对象。在Linq中、不同领域的Linq实现都有自己专属的操作符。
如IQueryable
通常是Linq to SQL的返回类型,当我们直接在上面调用Where
方法时,调用的是Linq to sql的扩展方法,因此有时候我们需要转换为标准的IEnumerable
才能调用Linq to OBJECT的扩展方法。
DefaultEmpty
操作符可以用来为一个空的输入序列生成一个对应的含有默认元素的新序列。引用类型为null
,值类型为相应的默认值。有些标准操作符在一个空的序列上调用时会抛出一个异常,而DefaultEmpty
恰恰可以解决这个问题。
例如,
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace ConsoleApplication
- {
- class Program
- {
- static void Main(string[] args)
- {
- List<string> ListInt = new List<string>();
- ListInt.Add("C");
- ListInt.Add("Java");
- ListInt.Add("Python");
- string str = ListInt.Where(s => s.StartsWith("JavaScript")).DefaultIfEmpty().First();
- Console.WriteLine("str="+str); //输出空白
- //使用string str1 = ListInt.Where(s => s.StartsWith("JavaScript")).First(); 如去掉DefaultEmpty就会报异常
- Console.ReadKey();
- }
- }
- }
Empty
操作符用于生成一个包含指定类型元素的空序列。
例如,
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace ConsoleApplication
- {
- class Program
- {
- static void Main(string[] args)
- {
- IEnumerable<int> ints = Enumerable.Empty<int>();
- Console.WriteLine(ints.Count()); //输出0
- Console.ReadKey();
- }
- }
- }