[Linq To Sql]解决join时的Collation冲突
背景
现在两表
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冲突的更多相关文章
- Linq to Sql/entity Join
inner join 模板: var query = from x in db.T1 join y in db.T2 on x.Id equals ...
- LINQ to SQL 的常见异常及解决办法
Ø 简介 本文主要介绍 LINQ to SQL 中常见的异常,以及对应的解决办法.包括以下内容: 1. 左连接情况下,右表非空类型字段可能抛出异常 1. 左连接情况下,右表非空类型字段可能抛 ...
- [转]SQL Collation冲突解决 临时表
本文转自:http://ju.outofmemory.cn/entry/191163 问题描述 在SQL Server中使用一些复杂的存储过程时,我们需要借用临时表来完成一些逻辑的处理,例如:数据的临 ...
- Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等)
Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等) 子查询 描述:查询订单数超过5的顾客信息 查询句法: var 子查询 = from c i ...
- LINQ to SQL Count/Sum/Min/Max/Avg Join
public class Linq { MXSICEDataContext Db = new MXSICEDataContext(); // LINQ to SQL // Count/Sum/Min/ ...
- LINQ to SQL系列四 使用inner join,outer join
先看一个最简单的inner join,在读取Student表时inner join Class表取的对应的Class信息: static void Main(string[] args) { usin ...
- Linq To Sql 语法 子查询 & In & Join
子查询 描述:查询订单数超过5的顾客信息 查询句法: var 子查询 =from cin ctx.Customers where ...
- LINQ TO SQL 中的join(转帖)
http://www.cnblogs.com/ASPNET2008/archive/2008/12/21/1358152.html join对于喜欢写SQL的朋友来说还是比较实用,也比较容易接受的东西 ...
- Linq to SQL 语法查询(子查询 & in操作 & join )
var 子查询 = from c in ctx.Customers where (from o in ctx.Ord ...
随机推荐
- oracle查询分区表中的数据
select * from TABLE_NAME partition(分区名) T WHERE T.COL_NAME= 'XX';
- xtrabackup使用
转自:https://www.cnblogs.com/waynechou/p/xtrabackup_backup.html 阅读目录 xtrabackup 选项 xtrabackup 全量备份恢复 x ...
- 简述ref与out区别
1.相同点:两者都是按地址(引用)传递的,使用后都将改变原来参数的数值. 2.区别:ref可以把参数的数值传递进函数,但是out是要把参数清空(声明时不必显示初始化),就是说你无法把一个数值从out传 ...
- 一个很棒的PHP缓存类,收藏下
<?php class Cache { /** 缓存目录 **/ var $CacheDir = './cache'; /** 缓存的文件 **/ var $CacheFile = ''; /* ...
- Hdp 4 window MR 注意事项
1,本机未安装HDP, 在代码中加一个环境变量,跳过检查. Environment.SetEnvironmentVariable("HADOOP_HOME", @"D ...
- 2019你还不学Python?
废话不多说,先上张图,展示一下 Python 不可置信的增长情况. 根据Stack Overflow 的调查显示,在全球范围内,Python 开发人员可以拿到 56,000 美元的年薪.而 Indee ...
- 选课 树形背包dp
题目描述 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习.现在有N门功课,每门课有个学分,每门课有一 ...
- Qt 学习之路 2(36):二进制文件读写
Qt 学习之路 2(36):二进制文件读写 豆子 2013年1月6日 Qt 学习之路 2 20条评论 在上一章中,我们介绍了有关QFile和QFileInfo两个类的使用.我们提到,QIODevice ...
- Chrome浏览器如何完美实现滚动截图技巧
一.前言 我们平时在浏览网页时,想把碰到好的网页内容或者文章截屏保存,但是网页的长度常常会超出屏幕高度,一般的截屏功能只能截取显示在屏幕上的内容,那我们该如何方便快捷截取全部内容?今天就分享一个如何利 ...
- 老男孩python作业2-购物车程序
购物车程序要求: 1.启动程序后,输入用户名密码后,如果是第一次登录,让用户输入工资,然后打印商品列表 2.允许用户根据商品编号购买商品 3.用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 ...