作者nonoman (Mr.不不)
看板C_Sharp
标题[问题] Join两个资料表不同data type
时间Fri Jun 2 22:57:37 2017
请教各位版上的高手们,
小弟目前在串接一个专案的资料库时,
主要是有三个table要join,
但join的是不同型别的资料,所以一直失败..
(环境是asp.net mvc 串 mysql)
以下举例
A_table
---------------
Aid int PK,AI
A00 string
A01 string
---------------
B_table
---------------
Bid int PK,AI
B00 string
---------------
C_table
---------------
Cid int PK,AI
C00 string
---------------
A_table.A00 对应的是 B_table.Bid
A_table.A01 对应的是 C_table.Cid
所以我用LINQ会是
var from a in db.A_table join b in db.B_table on a.A00 equals b.Bid
join c in db.C_table on a.A01 equals c.Cid
出来的结果是失败,因为type不对,
但是无论我把 Bid.toString() 及 Cid.toString(),
或是 sqlfunctions.stringconvert((double)b.Bid)
都是 LINQ to Entities does not recognize the method 'System.String ToString()'
之类的解释
碍於这个资料库是一个运行很久且不能修改,
是否有方式可以解决这个卡了好久的问题...
再次感谢~
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.134.88.126
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1496415460.A.AFB.html
1F:→ Litfal: 为什麽A00 String会关联到Bid int? 这DB没问题吗? 06/02 23:17
我也想知道为什麽当初设计的人要设成string...明明里面的值都是int
2F:→ Litfal: 用LINQPad试了一下,用b.Bid.ToString()没有问题啊 06/02 23:36
可是他在跑的时候就一直显示tostring不能使用耶...
所以因为我用EF才不能用吗QQ
我也有查到这个,可是我是用join这样是不是不能用..
※ 编辑: nonoman (114.136.121.205), 06/03/2017 11:00:22
5F:→ Litfal: 提供一下你的.net和EF等组件版本 06/03 12:08
6F:→ Litfal: 然後你先这样试: 06/03 12:08
7F:→ Litfal: from b in B_table select 06/03 12:10
8F:→ Litfal: new { BidStr = b.Bid.ToString() }; 06/03 12:11
9F:→ Litfal: .ToList() 去执行,看看能不能跑 06/03 12:12
10F:→ Litfal: 我觉得应该是 MySQL 的关系 06/03 12:16
这个我有试过,也是一样的QQ,EF版本6.1.3,.net4.5.2,感谢大大
※ 编辑: nonoman (114.136.121.205), 06/03/2017 13:08:36
11F:推 vi000246: 要不要试试用旧版的mysql组件 06/03 23:17
13F:→ vi000246: 试试先转成AsEnumerable() 06/03 23:20
14F:推 chatnoir: 不行的话你就把B,C select出来,把bid,cid转string 06/04 01:23
15F:推 Litfal: 我去架了一个MySQL Server来测,测不出你说的问题呢... 06/04 03:52
17F:→ Litfal: 试试把 MySql.Data 和 MySql.Data.Entity.EF6 更新一下? 06/04 03:59
18F:→ xo1100: 小弟linq用tostring也有这种状况 06/07 14:25
19F:→ xo1100: A或BC另外select new出来相对应型别再join看看 06/07 14:26