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 <表达式> ...
随机推荐
- bzoj 2286 [Sdoi2011]消耗战 虚树+dp
题目大意:多次给出关键点,求切断边使所有关键点与1断开的最小费用 分析:每次造出虚树,dp[i]表示将i和i子树与父亲断开费用 对于父亲x,儿子y ①y为关键点:\(dp[x]\)+=\(dismn( ...
- vue-cli 官方模板webpack-simple的npm run dev 与npm run bulid的一些问题
npm run dev命令后并不会在dist目录下生成build.js文件,开发环境下build.js是在运行内存中的. 在package.json的scripts属性的dev后面加上--port 8 ...
- Java 页面的工具包
所谓工具包,是指把页面的功能划分出来,放到另外一个包里面.方面工程管理.结构清晰.团队协作等. 根据原来的例子:要做一个com.myweb包的工具包com.myweb.tool 为导航栏统一创建接口 ...
- CFD-post的奇技淫巧
此处记录两个后处理美化的技巧:1.关于contour显示的美化:2.关于legend的显示美化 1. 直接举例说明,现在cfd-post里导入了一个二维case,先建立一个plane: apply以后 ...
- jenkins用户权限配置错误,导致登录时提示:没有Overall/read权限
jenkins用户权限配置错误,导致登录时提示:没有Overall/read权限 由于初次接触jenkins,于是在搭建好jenkins以后,想要对用户进行管理,于是乎开始在系统管理->conf ...
- Canvas get/putImageData
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 前端自动化构建工具-yoman浅谈
如今随着前端技术的飞速发展,前端项目也变得越来越复杂. 快速的搭建一个集成多种工具和框架的复杂前端项目也越来越成为一种需求. 当然如果你要自己从0开始完全自己diy,绝对可以,只不过需要耗费一些不少的 ...
- ROM、RAM、DRAM、SRAM和FLASH的区别
ROM和RAM指的都是半导体存储器,ROM是Read Only Memory的缩写,RAM是Random Access Memory的缩写.ROM在系统停止供电的时候仍然可以保持数据,而RAM通常都是 ...
- 微信小程序教程(第三篇)
小程序的架构及实现机制,信道服务及会话管理 小程序架构及实现机制 小程序并不是 H5 应用,而是更偏向于传统的 CS 架构,它是基于数据驱动的模式,一切皆组件(视图组件).所以建议在开发小程序时不要以 ...
- canvas动态小球重叠效果
前面的话 在javascript运动系列中,详细介绍了各种运动,其中就包括碰壁运动.但是,如果用canvas去实现,却是另一种思路.本文将详细介绍canvas动态小球重叠效果 效果展示 静态小球 首先 ...