背景

现在两表

A:

B:

如果尝试进行join操作则会报错:

分析

由于两表字段排序规则不一样,造成表连接时无法比较,从而抛出异常。如果用sql语句,只用显示指明Collation即可()。经查阅,目前EF尚没有提 供可以在代码中显式指明Collation的方式。目前我能想到的变通的方式有(假设想改变客户的数据库设置是不可能的):

1用Cross Join. (From a in tablea from b in tableb where a.Key==b.Key ...)

2用select ... where id in (select ...)的方式

3对要接连的字段(varchar)进行计算,如substring看看能否改变其性质

4对要接连的字段进行转换(如果全是编码,可以尝试转成int类型),再进行比对,看能否绕过排序规则

5使用EF API ExecuteQuery方法直接使用Sql语句进行查询

6实在不行,就只能先全部取出数据,然后在本地进行处理了。

解决

方式1-3全部无法绕过排序规则,具体步骤就不截图了。

方式4,在Linq To Sql中要将string转换成int(业务上这些字段可能是纯数字组成的流水号),使用Convert.ToInt32是不行的(虽然在Linq Pad中被支持,但vs中不行)。必须使用SqlFunctions或EntityFunctions之类的方法。

不幸的是,我在这些API中并没有找到可以将string cast为int的方法。幸运的是,sqlFunctions提供了一个CheckSum方法,用以计算string或其它类型的哈希值。通过哈希值相等判断两个string相等可靠么?答案是,比较可靠

试试看,很好:

   后话

  貌似sqlserver 2012解决了这个不便, 有兴趣可以试试。

[Linq To Sql]解决join时的Collation冲突的更多相关文章

  1. Linq to Sql/entity Join

      inner join 模板: var query = from x in db.T1             join y in db.T2             on x.Id equals ...

  2. LINQ to SQL 的常见异常及解决办法

    Ø  简介 本文主要介绍 LINQ to SQL 中常见的异常,以及对应的解决办法.包括以下内容: 1.   左连接情况下,右表非空类型字段可能抛出异常 1.   左连接情况下,右表非空类型字段可能抛 ...

  3. [转]SQL Collation冲突解决 临时表

    本文转自:http://ju.outofmemory.cn/entry/191163 问题描述 在SQL Server中使用一些复杂的存储过程时,我们需要借用临时表来完成一些逻辑的处理,例如:数据的临 ...

  4. Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等)

    Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等) 子查询 描述:查询订单数超过5的顾客信息 查询句法: var 子查询 = from c i ...

  5. LINQ to SQL Count/Sum/Min/Max/Avg Join

    public class Linq { MXSICEDataContext Db = new MXSICEDataContext(); // LINQ to SQL // Count/Sum/Min/ ...

  6. LINQ to SQL系列四 使用inner join,outer join

    先看一个最简单的inner join,在读取Student表时inner join Class表取的对应的Class信息: static void Main(string[] args) { usin ...

  7. Linq To Sql 语法 子查询 & In & Join

    子查询 描述:查询订单数超过5的顾客信息 查询句法: var 子查询 =from cin ctx.Customers                    where                  ...

  8. LINQ TO SQL 中的join(转帖)

    http://www.cnblogs.com/ASPNET2008/archive/2008/12/21/1358152.html join对于喜欢写SQL的朋友来说还是比较实用,也比较容易接受的东西 ...

  9. Linq to SQL 语法查询(子查询 & in操作 & join )

    var 子查询 = from c in ctx.Customers                    where                        (from o in ctx.Ord ...

随机推荐

  1. Eclipse内存不足 增加eclipse的运行内存

    自己解决的 三.    修改Run Configurations (此方法可行) 在代码上右键,依次点击“Run As ”-> “Run Configurations ”,在Arguments  ...

  2. 【ARC083E】Bichrome Tree 树形dp

    Description 有一颗N个节点的树,其中1号节点是整棵树的根节点,而对于第ii个点(2≤i≤N)(2≤i≤N),其父节点为PiPi 对于这棵树上每一个节点Snuke将会钦定一种颜色(黑或白), ...

  3. ExtJS 4.2.1学习笔记(一)——MVC架构与布局

    1       ExtJS入门 1.1     支持所有主流浏览器 调试推荐:chrome.Safari.Firefox 1.2     推荐目录结构 - appname (包含所有程序代码,是根目录 ...

  4. JS 的冒泡排序

    // 冒泡排序 从小到大 function maoPaoPaiXu(arr) { // 控制循环的比较的轮次 for (var i = 0; i < arr.length - 1; i++) { ...

  5. mysql数据库分库分表shardingjdbc

    分库分表理解 分库分表应用于互联网的两个场景;大量数据和高并发,通常策略有两种:垂直分库,水平拆分 垂直拆分:是根据业务将一个库拆分为多个库,将一个表拆分为多个表,例如:将不常用的字段和经常访问的字段 ...

  6. java 的在线下载文件 .pdf

    java  的在线下载文件  .pdf 1.下载资源的本地位置 2.设置响应头 3.下载代码 1 PeriodicalResource periodicalResource = periodicalR ...

  7. Python之freshman08 Socket

    1. Socket介绍 概念 A network socket is an endpoint of a connection across a computer network. Today, mos ...

  8. C++_基础6-名称空间

    名称空间 背景:C++中,名称可以是变量.函数.结构.枚举.类以及类和结构的成员.当随着项目的增大,名称相互冲突的可能性也将增加.例如许多厂商的类库,可能导致名称冲突.这种冲突被称为名称空间问题. 解 ...

  9. js 中文汉字转Unicode、Unicode转中文汉字、ASCII转换Unicode、Unicode转换ASCII、中文转换&#XXX函数代码

    最近看不少在线工具里面都有一些编码转换的代码,很多情况下我们都用得到,这里脚本之家小编就跟大家分享一下这些资料 Unicode介绍 Unicode(统一码.万国码.单一码)是一种在计算机上使用的字符编 ...

  10. POJ1064 Cable master 【二分找最大值】

    题目:题目太长了! https://vjudge.net/problem/POJ-1064 题意分析:给了你N根长度为小数形式的棍子,再给出了你需要分的棍子的数量K,但要求你这K根棍子的长度必须是一样 ...