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 <表达式> ...
随机推荐
- 谈谈NIO和IO
Channel,Buffer 和 Selector 构成了核心的API. 其它组件,如Pipe和FileLock,只不过是与三个核心组件共同使用的工具类. Channel和Buffer 基本上,所有的 ...
- dotnet调用node.js写的socket服务(websocket/socket/socket.io)
https://github.com/jstott/socketio4net/tree/develop socket.io服务端node.js,.里面有js写的客户端:http://socket.io ...
- imageX批量安裝windows7
以一臺電腦爲sample,安裝完成windows os及其全部update,安裝全部常用軟件,打印機驅動,網絡磁碟機等. 關閉安全控制"UAC"和"維護解決方案" ...
- 读取SQLServer数据库存储过程列表及参数信息
得到数据库存储过程列表: select * from dbo.sysobjects where OBJECTPROPERTY(id, N'IsProcedure') = 1 order by name ...
- cvc-complex-type.2.4.c: The matching wildcard...
在家里的电脑好好的,在单位的就不行,需要把web app libraties提到 最前面,然后clean一下项目
- ServletConfig、ServletContext属性遍历
可以进行属性遍历: package com.stono.servlet; import java.io.IOException; import java.util.Enumeration; impor ...
- ORACLE的Dead Connection Detection浅析
在复杂的应用环境下,我们经常会遇到一些非常复杂并且有意思的问题,例如,我们会遇到网络异常(网络掉包.无线网络断线).客户端程序异常(例如应用程序崩溃Crash).操作系统蓝屏.客户端电脑掉电.死机重启 ...
- HDU5835
Danganronpa Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- 怎么写cookie
html结构 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...
- js原生轮播图
轮播图是新手学前端的必经之路! 直接上代码! <!DOCTYPE html><html lang="en"><head> <meta ch ...