2011-11-11 69 views
2

我的代碼是:INT轉換爲字符串在LINQ to entites的

 var currency = (from ac in db.shop 
      join cur in db.books 
      on ac.CODE equals cur.CODE.ToString() //here is the Error 
      // because "ac.code is type strig" & "cur.code is type long 
      where ac.ID == merchantId 
      select new Currency() 
      { 
       ShopCode = ac.CODE, 
       PosCode = ac.POSCODE, 
      }).ToList(); 

我發現的ToString(),SqlFunctions.StringConvert(長)未在連接查詢的條件下工作,但在「選擇」工作查詢中的區域。 但是Devart.Data.Oracle.Entity.OracleFunctions.ToChar((long)cur.CODE)工作正常。由於我使用的是實體框架,因此它不應該遇到特定數據庫類型(即oracle或sql server)的問題。它應該工作,即使我將來從oracle更改爲sql。

請給我一個解決方案。

+0

你不能更改列既長或兩個字符串? –

回答

0

您是否嘗試過在此上鑄造。

嘗試:ac.CODE equals (string)cur.CODE

+0

謝謝Pankaj。 但它也行不通,我試過了。 – Onlineuser

+0

嘗試將它們都轉換爲字符串....我希望這能起作用 –

+0

不,它無法識別System.string() – Onlineuser

0

問題是,EF試圖將整個表達式轉換爲T-SQL查詢。 所以它會看起來類似於此:

select ac.CODE, cur.CODE from shop ac 
inner join books cur on ac.CODE = cur.CODE 

這是你的問題。 CODE字段有不同的類型,服務器無法加入。 在T-SQL中,您可以使用CAST,但由於EF不支持這種操作,因此無法執行任何操作。 而且,爲什麼你將這些代碼存儲在字符串中?如果您有這樣的查詢,那麼在大多數情況下,您的數據庫模式存在一些問題。 我建議你看一下模式並重構它,所以CODE總是長類型的。然後一切都會奏效。

如果你仍然真的想爲你使用不同類型的列。你可以看一下這個問題,看如何執行CAST Convert String to Int in EF 4.0

0

這應該解決您的問題:

var currency = (from ac in db.shop 
      join cur in db.books 
let codestr = cur.CODE.ToString() 
      on ac.CODE equals codestr 
      where ac.ID == merchantId 
      select new Currency() 
      { 
       ShopCode = ac.CODE, 
       PosCode = ac.POSCODE, 
      }).ToList();