LINQ 学习路程 -- 查询操作 ElementAt, ElementAtOrDefault
| Element Operators (Methods) | Description |
|---|---|
| ElementAt | 返回指定索引的元素,如果索引超过集合长度,则抛出异常 |
| ElementAtOrDefault | 返回指定索引的元素,如果索引超过集合长度,则返回元素的默认值,不抛出异常 |
| First | 返回集合的第一个元素,可以根据指定条件返回 |
| FirstOrDefault | 返回集合的第一个元素,可以根据指定条件返回,如果集合不存在元素,则返回元素的默认值 |
| Last | 返回集合中的最后一个元素,可以根据条件返回 |
| LastOrDefault | 返回集合中的最后一个元素,可以根据条件返回,如果集合不存在,则返回元素的默认值 |
| Single | 返回集合中的一个元素,可以根据条件返回,如果集合不在存元素或有多个元素,则抛出异常 |
| SingleOrDefault | 返回集合中的一个元素,可以根据条件返回,如果集合不在存元素,则返回元素默认值,如果存在多个元素,则抛出异常 |
public static TSource First<TSource>(this IEnumerable<TSource> source); public static TSource First<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate); public static TSource FirstOrDefault<TSource>(this IEnumerable<TSource> source); public static TSource FirstOrDefault<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);
public static TSource Last<TSource>(this IEnumerable<TSource> source); public static TSource Last<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate); public static TSource LastOrDefault<TSource>(this IEnumerable<TSource> source); public static TSource LastOrDefault<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);
public static TSource Single<TSource>(this IEnumerable<TSource> source); public static TSource Single<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate); public static TSource SingleOrDefault<TSource>(this IEnumerable<TSource> source); public static TSource SingleOrDefault<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);
SequenceEqual
判断集合相等‘
如果集合的元素是简单类型,则判断两个集合的元素个数,元素值,出现的位置是否一样
如果集合的元素是复杂类型,则判断两个集合的元素引用是否相同、元素个数,元素值,出现的位置是否一样
如果要判断集合元素为复杂类型的值是否相等,则要实现IQualityComparer<T>接口
class StudentComparer : IEqualityComparer<Student>
{
public bool Equals(Student x, Student y)
{
if (x.StudentID == y.StudentID && x.StudentName.ToLower() == y.StudentName.ToLower())
return true; return false;
} public int GetHashCode(Student obj)
{
return obj.GetHashCode();
}
}
Concat
连接两个元素类型相同的集合,并返回新的集合
IList<string> collection1 = new List<string>() { "One", "Two", "Three" };
IList<string> collection2 = new List<string>() { "Five", "Six"};
var collection3 = collection1.Concat(collection2);
foreach (string str in collection3)
Console.WriteLine(str);
DefaultIfEmpty
如果集合元素个数为0,调用DefaultIfEmpty后,则返回一个新的集合,且包含一个元素(元素值为默认值)
另一个方法重载接收一个参数,代替默认值返回
IList<string> emptyList = new List<string>(); var newList1 = emptyList.DefaultIfEmpty();
var newList2 = emptyList.DefaultIfEmpty("None"); Console.WriteLine("Count: {0}" , newList1.Count());
Console.WriteLine("Value: {0}" , newList1.ElementAt()); Console.WriteLine("Count: {0}" , newList2.Count());
Console.WriteLine("Value: {0}" , newList2.ElementAt());
| Method | Description |
|---|---|
| Empty | 返回空集合 |
| Range | Generates collection of IEnumerable<T> type with specified number of elements with sequential values, starting from first element. |
| Repeat | Generates a collection of IEnumerable<T> type with specified number of elements and each element contains same specified value. |
Empty不是IEnumerable的扩展方法,而是Enumerable的静态方法
var emptyCollection1 = Enumerable.Empty<string>();
var emptyCollection2 = Enumerable.Empty<Student>(); Console.WriteLine("Count: {0} ", emptyCollection1.Count());
Console.WriteLine("Type: {0} ", emptyCollection1.GetType().Name ); Console.WriteLine("Count: {0} ",emptyCollection2.Count());
Console.WriteLine("Type: {0} ", emptyCollection2.GetType().Name );
Range
方法返回指定元素个数的集合,集合以给定的值开始 (元素类型为int)
var intCollection = Enumerable.Range(, );
Console.WriteLine("Total Count: {0} ", intCollection.Count()); for(int i = ; i < intCollection.Count(); i++)
Console.WriteLine("Value at index {0} : {1}", i, intCollection.ElementAt(i));
Repeat
返回指定元素个数的集合,且元素的值一样
var intCollection = Enumerable.Repeat<int>(, );
Console.WriteLine("Total Count: {0} ", intCollection.Count()); for(int i = ; i < intCollection.Count(); i++)
Console.WriteLine("Value at index {0} : {1}", i, intCollection.ElementAt(i));
LINQ 学习路程 -- 查询操作 ElementAt, ElementAtOrDefault的更多相关文章
- LINQ 学习路程 -- 查询操作 Expression Tree
表达式树就像是树形的数据结构,表达式树中的每一个节点都是表达式, 表达式树可以表示一个数学公式如:x<y.x.<.y都是一个表达式,并构成树形的数据结构 表达式树使lambda表达式的结构 ...
- LINQ 学习路程 -- 查询操作 OrderBy & OrderByDescending
Sorting Operator Description OrderBy 通过给定的字段进行升序 降序 排序 OrderByDescending 通过给定字段进行降序排序,仅在方法查询中使用 Then ...
- LINQ 学习路程 -- 查询操作 Deferred Execution of LINQ Query 延迟执行
延迟执行是指一个表达式的值延迟获取,知道它的值真正用到. 当你用foreach循环时,表达式才真正的执行. 延迟执行有个最重要的好处:它总是给你最新的数据 实现延迟运行 你可以使用yield关键字实现 ...
- LINQ 学习路程 -- 查询操作 Join
Join操作是将两个集合联合 Joining Operators Usage Join 将两个序列连接并返回结果集 GroupJoin 根据key将两个序列连接返回,像是SQL中的Left Join ...
- LINQ 学习路程 -- 查询操作 where
1.where Filtering Operators Description Where Returns values from the collection based on a predicat ...
- LINQ 学习路程 -- 查询操作 GroupBy ToLookUp
Grouping Operators Description GroupBy GroupBy操作返回根据一些键值进行分组,每组代表IGrouping<TKey,TElement>对象 To ...
- LINQ 学习路程 -- 查询操作 let into关键字
IList<Student> studentList = new List<Student>() { , StudentName = } , , StudentName = } ...
- LINQ 学习路程 -- 查询操作 Aggregate
聚合操作执行数学的运算,如平均数.合计.总数.最大值.最小值 Method Description Aggregate 在集合上执行自定义聚集操作 Average 求平均数 Count 求集合的总数 ...
- LINQ 学习路程 -- 查询操作 Select, SelectMany
IList<Student> studentList = new List<Student>() { , StudentName = "John" }, , ...
随机推荐
- Linux下基于命令行的抓包方法
大家可能都已经对著名的抓包工具Ethereal比较熟悉了,这里再介绍一种基于命令行的抓包工具tcpdump. 举例:抓本机1813端口上的数据,并将抓包结果保存在test.cap文件中 然后在本地可以 ...
- 捕获网络数据包并进行分析的开源库-WinPcap
什么是WinPcap WinPcap是一个基于Win32平台的,用于捕获网络数据包并进行分析的开源库. 大多数网络应用程序通过被广泛使用的操作系统元件来访问网络,比如sockets. 这是一种简单的 ...
- NFS网络文件系统服务(配置实战)
NFS网络文件系统服务(实战) NFS(Network File System)即网络文件系统,它允许网络中的计算机之间通过TCP/IP网络共享资源.让不同的主机系统(NFS的客户端)可以透明地读写位 ...
- 刨根问底 HTTP 和 WebSocket 协议(下)
上篇介绍了HTTP1.1协议的基本内容,这篇文章将继续分析WebSocket协议,然后对这两个进行简单的比较. WebSocket WebSocket协议还很年轻,RFC文档相比HTTP的发布时间也很 ...
- MS SQL 分类汇总参数 grouping(**)=1 rollup cubt
转:http://www.111cn.net/database/mssqlserver/43368.htm 本文章介绍了关于sql多级分类汇总实现方法及数据结构,有碰到问题的同学可参考一下. 据库结构 ...
- PHP-Manual的学习----【语言参考】----【类型】
2017年7月17日15:18:02 该看Boolean 布尔类型1.PHP 支持 8 种原始数据类型. 2.四种标量类型: ◦ boolean(布尔型) ◦ integer(整型) ◦ ...
- LR测试HTTPS
从浏览器里导出cer证书 保存好后, 下载openssl-1.0.1s安装好openssl之后,进入openssl目录: 输入openssl命令,即进入命令模式: 先将要转换的cer证书也放到open ...
- 初步认识Spring MVC框架
Spring MVC 框架和Struts2等一样属于MVC框架,用于处理页面和后台的交互,据说它的效率要高于Struts2.下面县先说一下Spring MVC的结构,Spring MVC主要由Disp ...
- 大组合取模之:1<=n<=m<=1e6,1<=p<=1e9
/****************************** 大组合取模之:1<=n<=m<=1e6,1<=p<=1e9 使用:程序最开始调用getprime(),需要 ...
- php自定义函数: 遍历文件夹及其子文件夹
function traverse_folder($path = '.') { $current_dir = opendir($path); while(($file = readdir($curre ...