问题存在于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若类型,将数据带入,也是无法查询,报错:此上下文只支持基源类型或枚举类型
最后:数据库是肯定不能修改字段数据类型的
园内大神多,有没有谁能给个好的解决方案?
no zuo no die.
并不是我想作死,半路接手这个项目的,无奈啊,字段不能改,改了之前的程序又会报错,您有好的解决方案么?
@单纯的小白: 数据库你能动吗?我说的是增加视图,你在数据库弄一个视图把这个两个表关联起来,对LINQ来说就没有问题了,当成一个表处理。
@爱编程的大叔: 哦,对了,忘记说了,视图的确是可以,但是也忒麻烦了,总不能说有一个链表就用一个视图吧?还有,视图用多了,对sql的执行效率有影响么?其实我更想知道有没有一个便捷的解决办法,能直接在程序端处理数据,查询出来的?
@单纯的小白: 你傻啊!给 table1 创建 table1_view,把 pid 转换成 varchar,或者给 table2 创建 table2_view ,把 id 转换成 uniqueidentifier。
@单纯的小白:
1、内建视图的性能是好于临时JOIN的。因为SQL 引擎会优化。
2、你要是一大堆都是这样的土设计,那还是趁早修改结构吧,一两个还可以接受。
3、要不然你就用LINQ直接执行SQL语句的命令, myDataContext.Execute....啥的我也忘了,反正里面可以直接写SQL语句。
@爱编程的大叔: 好的,了解了,谢谢
join b in table2 on a.pid.ToString() equals b.id
在linq里边.ToString()是不行的,linq中没有对应的内置函数,在执行的时候会报错