LINQ中,Single()、SingleOrDefault()的解析、示例
LINQ一般查询到的结果是IEnumerable<T>集合类型,想要从中取出单一的元素,可以使用Single、First、Last、ElementAt等方法,以及它们带有OrDefault的形式。
Single返回序列中的唯一元素,First、Last返回第一个、最后一个元素。
对比一下:
| 方法 | 序列为null时 | 序列不包含任何元素时 | 序列只包含一个元素时 | 序列包含多个元素时 |
| Single | 引发异常 | 引发异常 | 返回该元素 | 引发异常 |
| SingleOrDefault | 引发异常 | 返回default(TSource) | 返回该元素 | 引发异常 |
| First | 引发异常 | 引发异常 | 返回该元素 | 返回第一个元素 |
| FirstOrDefault | 引发异常 | 返回default(TSource) | 返回该元素 | 返回第一个元素 |
| Last | 引发异常 | 引发异常 | 返回该元素 | 返回最后一个元素 |
| LastOrDefault | 引发异常 | 返回default(TSource) | 返回该元素 | 返回最后一个元素 |
Single、SingleOrDefault可以用来确保序列中不存在多个元素。
SingleOrDefault可以用来检验序列中是否包含有元素。引用类型的默认值default(T)为null,表示在序列中没有找到元素。
下面来看一下Single、SingleOrDefault的实际使用。
1、用户登录:
public static User QueryUser(string code, string password)
{
using (SQLiteConnection conn = new SQLiteConnection(connectionString))
{
string sql = "select * from User where Code = @Code and Password = @Password";
var param = new { Code = code, Password = password };
return conn.Query<User>(sql, param).SingleOrDefault();
}
}
在用户表中,Code是唯一的,如果查询出多个满足条件的用户,要抛异常;如果没有查询到用户,返回null做进一步判断处理。
2、将用户表绑定到DataGrid后,单选一个用户:
IEnumerable<User> query = (dataGrid.ItemsSource as IEnumerable<User>)
.Where(user => user.IsChecked); if (query.Count() == )
{
MessageBox.Show("没有选中");
return;
}
if (query.Count() > )
{
MessageBox.Show("不能多选");
return;
} User user = query.Single();
因为在之前判断过序列的元素数量,所以调用Single取出用户就不会有问题了。
LINQ中,Single()、SingleOrDefault()的解析、示例的更多相关文章
- LINQ中的连接(join)用法示例
Linq中连接主要有组连接.内连接.左外连接.交叉连接四种.各个用法如下. 1. 组连接 组连接是与分组查询是一样的.即根据分组得到结果. 如下例,根据publisther分组得到结果. 使用组连接的 ...
- 关于Linq中First、FirstOrDefault;Single、SingleOrDefault等方法的说明
关于Linq中First.FirstOrDefault:Single.SingleOrDefault等方法的说明 这里以First.FirstOrDefault进行说明,其他类似. 1.First:取 ...
- Linq中关键字的作用及用法
Linq中关键字的作用及用法 1.All:确定序列中的所有元素是否都满足条件.如果源序列中的每个元素都通过指定谓词中的测试,或者序列为空,则为 true:否则为 false. Demo: 此示例使用 ...
- Python中第三方模块requests解析
一.简述 Requests HTTP Library 二.模块框架 ''' __version__ _internal_utils adapters api auth certs compat coo ...
- Linq中DeferredLoadingEnabled,DataLoadOption的用法
1. 基本的数据关系图 Student和Class之间是多对一关系,Student和Course之间是多对多关系. DataContext的DeferredLoadingEnabled属性指定是否需 ...
- .net中的泛型全面解析
从2.0起我们一直就在谈论泛型,那么什么是泛型,泛型有什么好处,与泛型相关的概念又该怎么使用,比如泛型方法,泛型委托.这一篇我会全面的介绍泛型. 那么首先我们必须搞清楚什么是泛型,泛型其实也是一种类型 ...
- .NET Core中的认证管理解析
.NET Core中的认证管理解析 0x00 问题来源 在新建.NET Core的Web项目时选择“使用个人用户账户”就可以创建一个带有用户和权限管理的项目,已经准备好了用户注册.登录等很多页面,也可 ...
- Entity Framework 6 Recipes 2nd Edition(11-9)译 -> 在LINQ中使用规范函数
11-9. 在LINQ中使用规范函数 问题 想在一个LINQ查询中使用规范函数 解决方案 假设我们已经有一个影片租赁(MovieRental )实体,它保存某个影片什么时候租出及还回来,以及滞纳金等, ...
- Entity Framework 6 Recipes 2nd Edition(11-11)译 -> 在LINQ中调用数据库函数
11-11. 在LINQ中调用数据库函数 问题 相要在一个LINQ 查询中调用数据库函数. 解决方案 假设有一个任命(Appointment )实体模型,如Figure 11-11.所示, 我们想要查 ...
- LINQ中的一些查询语句格式
LINQ的基本格式如下所示:var <变量> = from <项目> in <数据源> where <表达式> orderby <表达式> ...
随机推荐
- AtCoder Beginner Contest 052 ABCD题
A - Two Rectangles Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement The ...
- Java解析JSON文件的方法(一)
一.首先需要在Eclipse工程中导入相关的jar包,jar包参见链接:http://yunpan.alibaba-inc.com/share/link/NdA5b6IFK 二.提供一份待解析的jso ...
- ImageView的展示方式
[转]http://www.cnblogs.com/yejiurui/archive/2013/02/25/2931767.html 在网上查了好多资料,大致都雷同,大家都是互相抄袭的,看着很费劲 ...
- php AES 加密类
<?php class CryptAES { protected $cipher = MCRYPT_RIJNDAEL_128; protected $mode = MCRYPT_MODE_ECB ...
- javascript设计模式之解释器模式详解
http://www.jb51.net/article/50680.htm 神马是“解释器模式”? 先翻开<GOF>看看Definition:给定一个语言,定义它的文法的一种表示,并定义一 ...
- MapReduce深度分析(二)
MapReduce深度分析(二) 五.JobTracker分析 JobTracker是hadoop的重要的后台守护进程之一,主要的功能是管理任务调度.管理TaskTracker.监控作业执行.运行作业 ...
- JspContext对象与PageContext对象
JspContext对象与PageContext对象: public abstract javax.servlet.jsp.PageContext extends (public abstract) ...
- 移动设备应用程序中支持多个屏幕大小和 DPI 值
支持多个屏幕大小和 DPI 值的指导原则 要部署独立于平台的应用程序,应了解不同的输出设备.设备可以具有不同的屏幕大小或分辨率以及不同的 DPI 值或密度. Flex 工程师 Jason SJ 在他的 ...
- Spring aop:decare-parent 为类增加新的方法
Spring aop:decare-parent 为类增加新的方法: 使用XML配置的方式: XML: <?xml version="1.0" encoding=" ...
- windows10 subsystem(bash) 如何使用jupter notebook
按照传统惯例,应该映射端口jupyter notebook --port=15000,然后用浏览器开http://localhost:15000/ 但是当你运行python的时候,居然发现kernel ...