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对象,然后又对该 ...
随机推荐
- centos7下 svn的配置
安装svn yum install subversion 查看安装版本 svnserve --version 创建svn版本库目录 mkdir -p /root/svn/test 创建svn版本库 s ...
- Scalability of Kafka Messaging using Consumer Groups
May 10, 2018 By Suhita Goswami No Comments Categories: Data Ingestion Flume Kafka Use Case Tradition ...
- Linux运维高级-核心知识提高
一.Linux之定时任务crond 二.Linux之用户管理 三.Linux之初识磁盘 四.Linux之磁盘管理 五.Linux三剑客-SED 六.Linux三剑客-AWK 七.初识shell编程 八 ...
- eclipse 创建springboot项目
eclipse创建springboot项目的三种方法: 引自:https://blog.csdn.net/mousede/article/details/81285693
- (七)Create an Index
Now let’s create an index named "customer" and then list all the indexes again: 现在让我们创建一个名 ...
- 数据类型:list列表[]、元祖tuple()、dict字典{}
List 列表[] 可变的 lst = [1,2,3,4] #改 lst[(元素下标)] = '需要修改的' #通过下表修改 lst[下标:下标] = '需要修改的' #通过范围修改 #加 lst.a ...
- 混合编程[python+cpp+cuda]
很多时候,我们是基于python进行模型的设计和运行,可是基于python本身的速度问题,使得原生态python代码无法满足生产需求,不过我们可以借助其他编程语言来缓解python开发的性能瓶颈.这里 ...
- 想了解SAW,BAW,FBAR滤波器的原理?看这篇就够了!
想了解SAW,BAW,FBAR滤波器的原理?看这篇就够了! 很多通信系统发展到某种程度都会有小型化的趋势.一方面小型化可以让系统更加轻便和有效,另一方面,日益发展的IC**技术可以用更低的成本生产 ...
- MySQL CONCAT opposite
csv - What is the opposite of GROUP_CONCAT in MySQL? - Stack Overflowhttps://stackoverflow.com/quest ...
- git branch --set-upstream 本地关联远程分支
最近使用git pull的时候多次碰见下面的情况: There is no tracking information for the current branch.Please specify whi ...