作者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/m.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