【问题标题】:converting int to string in linq to entites在linq中将int转换为字符串到实体
【发布时间】:2011-12-26 19:48:46
【问题描述】:

我的代码是:

        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(long) 在连接查询条件下不工作,但在查询的“选择”区域工作。 但是 Devart.Data.Oracle.Entity.OracleFunctions.ToChar((long)cur.CODE) 工作正常。由于我使用的是实体框架,因此特定数据库类型(即 oracle 或 sql server)不应该有问题。即使我将来从 oracle 更改为 sql,它也应该可以工作。

请给我一个解决方案。

【问题讨论】:

  • 你不能把列改成长的还是字符串的?

标签: c# .net linq-to-entities tostring


【解决方案1】:

这应该可以解决您的问题:

  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();

【讨论】:

    【解决方案2】:

    问题是,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 始终是 long 类型。然后一切都会好起来的。

    如果您仍然真的想为您的列使用不同的类型。大家可以看看这个问题,看看如何执行CAST Convert String to Int in EF 4.0

    【讨论】:

      【解决方案3】:

      您可以在数据库上创建VIEW Currency 并在视图上执行查询。

      这是 Linq to Entities 支持的方法列表,如果不支持转换,则无法执行。 http://msdn.microsoft.com/en-us/library/bb738681.aspx

      【讨论】:

        【解决方案4】:

        您是否尝试对此进行投射。

        试试看:ac.CODE equals (string)cur.CODE

        【讨论】:

        • 不,它无法识别 System.string()
        • 您不能将 long 转换为字符串。你会得到一个InvalidCastException
        猜你喜欢
        • 2010-11-07
        • 1970-01-01
        • 1970-01-01
        • 2015-10-11
        • 2012-05-18
        • 2012-01-09
        • 1970-01-01
        相关资源
        最近更新 更多