2011-11-11 41 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();