首页新闻找找看学习计划

关于linq多表关联字段的类型不一样的问题

0
悬赏园豆:50 [已解决问题] 解决于 2015-02-10 11:41

问题存在于linq语法

from a in table1

join b in table2 on a.pid equals b.id 

select new { a.id }

a.pid为GUID类型,b.id为string类型

从sqlserver数据库映射到vs中的实体的数据类型都是强类型,在用join on的时候,是无法对比的

有什么好的方法能转一下?

GUID直接tostring()是不行的,linq不认识,无此内置函数

直接创建一个新的var若类型,将数据带入,也是无法查询,报错:此上下文只支持基源类型或枚举类型

 最后:数据库是肯定不能修改字段数据类型的

 园内大神多,有没有谁能给个好的解决方案?

单纯的小白的主页 单纯的小白 | 初学一级 | 园豆:108
提问于:2015-02-10 10:10
< >
分享
最佳答案
1

no zuo no die. 

收获园豆:50
爱编程的大叔 | 高人七级 |园豆:29841 | 2015-02-10 11:18

并不是我想作死,半路接手这个项目的,无奈啊,字段不能改,改了之前的程序又会报错,您有好的解决方案么?

单纯的小白 | 园豆:108 (初学一级) | 2015-02-10 11:20

@单纯的小白: 数据库你能动吗?我说的是增加视图,你在数据库弄一个视图把这个两个表关联起来,对LINQ来说就没有问题了,当成一个表处理。

爱编程的大叔 | 园豆:29841 (高人七级) | 2015-02-10 11:24

@爱编程的大叔: 哦,对了,忘记说了,视图的确是可以,但是也忒麻烦了,总不能说有一个链表就用一个视图吧?还有,视图用多了,对sql的执行效率有影响么?其实我更想知道有没有一个便捷的解决办法,能直接在程序端处理数据,查询出来的?

单纯的小白 | 园豆:108 (初学一级) | 2015-02-10 11:30

@单纯的小白: 你傻啊!给 table1 创建 table1_view,把 pid 转换成 varchar,或者给 table2 创建 table2_view ,把 id 转换成 uniqueidentifier。

Launcher | 园豆:45040 (高人七级) | 2015-02-10 11:35

@单纯的小白:

1、内建视图的性能是好于临时JOIN的。因为SQL 引擎会优化。

2、你要是一大堆都是这样的土设计,那还是趁早修改结构吧,一两个还可以接受。

3、要不然你就用LINQ直接执行SQL语句的命令, myDataContext.Execute....啥的我也忘了,反正里面可以直接写SQL语句。

爱编程的大叔 | 园豆:29841 (高人七级) | 2015-02-10 11:36

@爱编程的大叔: 好的,了解了,谢谢

单纯的小白 | 园豆:108 (初学一级) | 2015-02-10 11:41
其他回答(1)
0

join b in table2 on a.pid.ToString() equals b.id

nianhua11 | 园豆:736 (小虾三级) | 2015-02-10 11:25

在linq里边.ToString()是不行的,linq中没有对应的内置函数,在执行的时候会报错

支持(0) 反对(0) 单纯的小白 | 园豆:108 (初学一级) | 2015-02-10 11:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册