背景

现在两表

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. oracle查询分区表中的数据

    select * from TABLE_NAME partition(分区名) T WHERE T.COL_NAME= 'XX';

  2. xtrabackup使用

    转自:https://www.cnblogs.com/waynechou/p/xtrabackup_backup.html 阅读目录 xtrabackup 选项 xtrabackup 全量备份恢复 x ...

  3. 简述ref与out区别

    1.相同点:两者都是按地址(引用)传递的,使用后都将改变原来参数的数值. 2.区别:ref可以把参数的数值传递进函数,但是out是要把参数清空(声明时不必显示初始化),就是说你无法把一个数值从out传 ...

  4. 一个很棒的PHP缓存类,收藏下

    <?php class Cache { /** 缓存目录 **/ var $CacheDir = './cache'; /** 缓存的文件 **/ var $CacheFile = ''; /* ...

  5. Hdp 4 window MR 注意事项

      1,本机未安装HDP, 在代码中加一个环境变量,跳过检查. Environment.SetEnvironmentVariable("HADOOP_HOME", @"D ...

  6. 2019你还不学Python?

    废话不多说,先上张图,展示一下 Python 不可置信的增长情况. 根据Stack Overflow 的调查显示,在全球范围内,Python 开发人员可以拿到 56,000 美元的年薪.而 Indee ...

  7. 选课 树形背包dp

    题目描述 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习.现在有N门功课,每门课有个学分,每门课有一 ...

  8. Qt 学习之路 2(36):二进制文件读写

    Qt 学习之路 2(36):二进制文件读写 豆子 2013年1月6日 Qt 学习之路 2 20条评论 在上一章中,我们介绍了有关QFile和QFileInfo两个类的使用.我们提到,QIODevice ...

  9. Chrome浏览器如何完美实现滚动截图技巧

    一.前言 我们平时在浏览网页时,想把碰到好的网页内容或者文章截屏保存,但是网页的长度常常会超出屏幕高度,一般的截屏功能只能截取显示在屏幕上的内容,那我们该如何方便快捷截取全部内容?今天就分享一个如何利 ...

  10. 老男孩python作业2-购物车程序

    购物车程序要求: 1.启动程序后,输入用户名密码后,如果是第一次登录,让用户输入工资,然后打印商品列表 2.允许用户根据商品编号购买商品 3.用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 ...