Ø  简介

本文主要介绍 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 的常见异常及解决办法的更多相关文章

  1. Android 常见异常及解决办法

    Ø  前言 本文主要记录 Android 的常见异常及解决办法,以备以后遇到相同问题时可以快速解决. 1.   java.lang.NullPointerException: Attempt to i ...

  2. IIS 常见异常及解决办法

    Ø  简介 IIS 是我们平常接触比较多的服务端软件,用于站点发布等,本文主要记录 IIS 常见的异常及解决办法.主要包括: 1.   Visual Studio 启动 Web 项目提示"无 ...

  3. Entity Framework 6.0 常见异常及解决办法

    Ø  简介 本文主要记录 EF(Entity Framework) 在平时的开发中可能遇到的异常,以及应该如何去解决. 1.   System.InvalidOperationException 1) ...

  4. elasticsearch常见异常及解决办法

    报错信息:Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000085330000, 20602552 ...

  5. Python开发 常见异常和解决办法

    1.sqlalchemy创建外键关系报错property of that name exists on mapper SQLAlchemy是Python编程语言下的一款开源软件,提供了SQL工具包及对 ...

  6. java web 常见异常及解决办法

    javax.servlet.ServletException: javax/servlet/jsp/SkipPageException 重启tomcat, javax.servlet.ServletE ...

  7. 虚拟机安装Linux中常见异常及解决办法

    如果接着下去的提示按Test 的话 会出现Unable to read the disc checksum from the primary volume descriptor. This proba ...

  8. hadoop安装遇到的各种异常及解决办法

    hadoop安装遇到的各种异常及解决办法 异常一: 2014-03-13 11:10:23,665 INFO org.apache.hadoop.ipc.Client: Retrying connec ...

  9. iOS常见异常Exec_Bad_Access问题解决办法

    iOS常见异常Exec_Bad_Access问题解决办法     在iOS开发中,经常遇到Exec_Bad_Access异常,导致程序奔溃问题,一般这个问题都是因为过早的release对象,然后又对该 ...

随机推荐

  1. tomcat+struts配置总结

    忙活了好些天Tomcat和Struts配置,踩了好多坑 此文仅供参考,只是笔者自身的记录. 配置在这里就不赘述了,贴几个链接给你们参考把! 一.配置简述 jdk配置 https://blog.csdn ...

  2. 【Linux基础】grep命令

    1.简介 grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来. 命令格式:grep [option] pattern file 2.常用参数与举例: -e :  使用P ...

  3. 【Teradata】使用arcmain进行不落地数据迁移(管道)

    1.备份脚本准备 //脚本bak_ds.arc .logon 192.168.253.222/sysdba,learning1510; archive data tables(DS) ,release ...

  4. jspdf生成pdf并在页面展示

    jspdf调用ouput即可 https://blog.csdn.net/dragonzoebai/article/details/18243823 获取页面生成pdf:jspdf+html2canv ...

  5. day15-面向对象基础(二)

    今天整理类的组合以及类的三大特性 1.类的组合 2.类的继承 3.类的封装 4.类的多态 开始今日份整理 1.类的组合 类与类之间,并不是独立的,很多的时候在正常使用的时候都是类与类之间互相调用,所以 ...

  6. Ubuntu 14.04 结束支持该如何应对?

    Ubuntu 14.04 即将于 2019 年 4 月 30 日结束支持.这意味着在此日期之后 Ubuntu 14.04 用户将无法获得安全和维护更新. 你甚至不会获得已安装应用的更新,并且不手动修改 ...

  7. 微信小程序开发 (资料汇总,谁还没被坑过?希望助你绕过一些坑)

    最近帮人家做一个微信小程序,刚好想熟悉一下.由于牵扯到多用户使用系统,以及数据共享,所以自然架构选择了,客户端和服务器的方式. 后台服务器是windows server,后台程序是.Net  WebA ...

  8. 家庭记账本小程序之改(java web基础版五)

    实现修改消费账单 1.main_left.jsp中该部分,调用Servlet中的list方法 2.Servlet中的list方法,调用Dao层的list方法,跳转到list.jsp页面 3.Dao层的 ...

  9. 【学习总结】GirlsInAI ML-diary day-7-数据类型转换

    [学习总结]GirlsInAI ML-diary 总 原博github链接-day7 回顾之前见到的常见数据类型 int 整数 float 浮点数 bool 布尔值 string 字符串 ... 1- ...

  10. JVM中的垃圾回收算法GC

    GC是分代收集算法:因为Young区,需要回收垃圾对象的次数操作频繁:Old区次数上较少收集:基本不动Perm区.每个区特点不一样,所以就没有通用的最好算法,只有合适的算法. GC的4大算法 1.引用 ...