LINQ to SQL 的常见异常及解决办法
Ø 简介
本文主要介绍 LINQ to SQL 中常见的异常,以及对应的解决办法。包括以下内容:
1. 左连接情况下,右表非空类型字段可能抛出异常
1. 左连接情况下,右表非空类型字段可能抛出异常
说明:UserInfo.CustomerId 关联 Customer.Id,为多对一的关系。但是 UserInfo.CustomerId 字段可能为 null, 所以运行以下语句将报错:
1) LINQ 语句
var datas1 = (from t1 in DataContext.UserInfoes
join t2 in DataContext.Customers on t1.CustomerId equals t2.Id into t12
from t3 in t12.DefaultIfEmpty()
where t1.id > 5000
select new
{
UserId = t1.id,
CustomerId1 = t1.CustomerId,
CustomerId2 = t3.Id
}).Take(3).ToArray();
2) 生成 SQL
SELECT
[Limit1].[C1] AS [C1],
[Limit1].[id] AS [id],
[Limit1].[CustomerId] AS [CustomerId],
[Limit1].[id1] AS [id1]
FROM ( SELECT TOP (3)
[Extent1].[id] AS [id],
[Extent1].[CustomerId] AS [CustomerId],
1 AS [C1],
[Extent2].[Id] AS [id1]
FROM [dbo].[UserInfo] AS [Extent1]
LEFT OUTER JOIN [dbo].[Customer] AS [Extent2] ON [Extent1].[CustomerId] = [Extent2].[Id]
WHERE [Extent1].[id] > 5000
) AS [Limit1]
3) 执行结果

4) 将抛出异常
System.InvalidOperationException:“到值类型“System.Int64”的强制转换失败,因为具体化值为 null。结果类型的泛型参数或查询必须使用可以为 null 的类型。”
5) 解决办法:
1. 分析:其实很简单,因为是左连接,左表记录不能与右表连接时,右表字段将以 null 返回。但是程序中是以 long 类型接收,不能为 null 值,所以就报错了。
2. 那我们是不是将非空类型(long)改为可空类型(Nullable<long>)就可以了?没错,我们只需要改写一行代码即可:
CustomerId2 = (long?)t3.Id
LINQ to SQL 的常见异常及解决办法的更多相关文章
- Android 常见异常及解决办法
Ø 前言 本文主要记录 Android 的常见异常及解决办法,以备以后遇到相同问题时可以快速解决. 1. java.lang.NullPointerException: Attempt to i ...
- IIS 常见异常及解决办法
Ø 简介 IIS 是我们平常接触比较多的服务端软件,用于站点发布等,本文主要记录 IIS 常见的异常及解决办法.主要包括: 1. Visual Studio 启动 Web 项目提示"无 ...
- Entity Framework 6.0 常见异常及解决办法
Ø 简介 本文主要记录 EF(Entity Framework) 在平时的开发中可能遇到的异常,以及应该如何去解决. 1. System.InvalidOperationException 1) ...
- elasticsearch常见异常及解决办法
报错信息:Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000085330000, 20602552 ...
- Python开发 常见异常和解决办法
1.sqlalchemy创建外键关系报错property of that name exists on mapper SQLAlchemy是Python编程语言下的一款开源软件,提供了SQL工具包及对 ...
- java web 常见异常及解决办法
javax.servlet.ServletException: javax/servlet/jsp/SkipPageException 重启tomcat, javax.servlet.ServletE ...
- 虚拟机安装Linux中常见异常及解决办法
如果接着下去的提示按Test 的话 会出现Unable to read the disc checksum from the primary volume descriptor. This proba ...
- hadoop安装遇到的各种异常及解决办法
hadoop安装遇到的各种异常及解决办法 异常一: 2014-03-13 11:10:23,665 INFO org.apache.hadoop.ipc.Client: Retrying connec ...
- iOS常见异常Exec_Bad_Access问题解决办法
iOS常见异常Exec_Bad_Access问题解决办法 在iOS开发中,经常遇到Exec_Bad_Access异常,导致程序奔溃问题,一般这个问题都是因为过早的release对象,然后又对该 ...
随机推荐
- 验证二叉搜索树的golang实现
给定一个二叉树,判断其是否是一个有效的二叉搜索树. 一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数. 节点的右子树只包含大于当前节点的数. 所有左子树和右子树自身必须也是二叉搜索树. ...
- springboot项目屏蔽mq或者mongodb的监控日志输出
最近写项目,用的是springboot,其中用到了rabbitmq和mongodb,配置完成 项目启动后,会输出如下日志: mongodb和mq的检测,会一直打印日志,这样会影响开发人员的测试. 如何 ...
- Zabbix 3.4.7调整监控阈值以及告警级别
1.找到需要监控的主机:右上角进行搜索 我们要更改sepm02p的阈值和级别: 进行更改级别:先点击Triggers , 选中要更改的监控项,例如我要更改CPU,点击以下红色标出的,千万不要选择Tem ...
- L2-4 部落 (25 分)
在一个社区里,每个人都有自己的小圈子,还可能同时属于很多不同的朋友圈.我们认为朋友的朋友都算在一个部落里,于是要请你统计一下,在一个给定社区中,到底有多少个互不相交的部落?并且检查任意两个人是否属于同 ...
- tiff图片拆分
本程序下载地址: tiff格式的图片可以由多张图片合成, 也可以拆分为多张图片.不管是合成或者拆分,都借助了第三方开源库Cximage,对于这个图像库的使用,我们没有必要去一行一行的去看它的代码实现, ...
- Auto Layout: Programmatic Constraints - BNR
继续Auto Layout - BNR篇. 打开BNRDetailViewController.m文件,重载viewDidLoad方法来创建UIImageView对象.当你想要给通过加载NIB文件创建 ...
- UITouch - BNR
本节任务:创建一个视图,让用户在视图上拖动手指来画线. UIView类能够重载4个方法来处理不同的触摸事件. - (void)touchesBegan:(NSSet *)touches withEve ...
- zsh : command not found pip3 的解决方案
问题描述 在 zsh 中执行 pip xxx ,出现错误 zsh: command not found: pip3 . 当然我很确定自己是有安装 pip3 的,应该是应该切换了shell,导致环境变量 ...
- docker WARNING: IPv4 forwarding is disabled 问题解决
问题: [yuyongxr@localhost ~]$sudo docker run -d --name nginx -p : nginx WARNING: IPv4 forwarding is di ...
- git和github的基本使用方法
版权声明:本文为博主原创文章,欢迎转载,并请注明出处.联系方式:460356155@qq.com git及github是当今最流行的代码版本管理系统,以下是整理的基本使用方法,也是我的一个操作实录(w ...