Vb.net LINQ到SQL can';t将Int32转换为字符串-这怎么可能?

Vb.net LINQ到SQL can';t将Int32转换为字符串-这怎么可能?,vb.net,linq-to-sql,Vb.net,Linq To Sql,我犯了这个错误 Unable to cast object of type 'System.Int32' to type 'System.String'. 执行例行LINQ到SQL查询时: Return ( From n In DbContext.Newsletters Where n.NewsletterID = NewsletterID ).FirstOrDefault 这是堆栈跟踪FWIW [InvalidCastException:

我犯了这个错误

  Unable to cast object of type 'System.Int32' to type 'System.String'. 
执行例行LINQ到SQL查询时:

  Return (
       From n In DbContext.Newsletters 
       Where n.NewsletterID = NewsletterID
     ).FirstOrDefault
这是堆栈跟踪FWIW

[InvalidCastException: Unable to cast object of type 'System.Int32' to type 'System.String'.]
   System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult) +1151
   System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries) +113
   System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query) +344
   System.Data.Linq.DataQuery`1.System.Linq.IQueryProvider.Execute(Expression expression) +56
   System.Linq.Queryable.FirstOrDefault(IQueryable`1 source) +265
   ...
两个问题:

  • Int32怎么可能不能转换为字符串
  • 我如何调试这样的东西?由于这一切都发生在林克的内心深处,我甚至无法得到任何迹象表明这是对什么领域感到愤怒 其中一个: 或者


    BC这些类型非常不同

    嗯,不能将int转换为字符串,因为这些类型不兼容,但可以将其转换。我想这很简单:

    Return ( 
           From n In DbContext.Newsletters  
           Where n.NewsletterID = int.Parse( NewsletterID )
         ).FirstOrDefault
    

    因为局部变量是字符串,数据库列是整数。

    Int32
    不能转换为
    字符串,因为它们的类型完全不同。您可以通过
    ToString
    Int32
    转换为
    String
    ,但没有可用的强制转换

    从这个简单的陈述中,我不得不猜测
    n.newsletteId
    newsletteId
    不是同一类型。需要将其转换为
    Int32
    字符串,例如

      Return (
           From n In DbContext.Newsletters 
           Where n.NewsletterID = NewsletterID.ToString(CultureInfo.InvariantCulture)
         ).FirstOrDefault
    
    或者,更有可能

      Return (
           From n In DbContext.Newsletters 
           Where n.NewsletterID = Integer.Parse(NewsletterID, CultureInfo.InvariantCulture)
         ).FirstOrDefault
    

    取决于表达式两侧的类型。

    可能是您的实体映射错误地将int映射到某个字符串?检查通讯的每个属性的映射。

    否,n.通讯ID和通讯ID都是整数。我只是通过要求查看DbContext.Newsletters,就在调试器中得到了错误。@Herb-也许您的LINQ映射中有错误?在使用设计器添加某个列后,您是否碰巧更改了该列的类型,而没有更新设计器对该列的理解?否,n。newsletteID和newsletteID都是整数。我只是通过要求查看DbContext.newslettes.No,n.newslettesid和newslettesid都是整数,就在调试器中得到了错误。我只是要求查看DbContext.Newsletters,就在调试器中得到了错误。
      Return (
           From n In DbContext.Newsletters 
           Where n.NewsletterID = NewsletterID.ToString(CultureInfo.InvariantCulture)
         ).FirstOrDefault
    
      Return (
           From n In DbContext.Newsletters 
           Where n.NewsletterID = Integer.Parse(NewsletterID, CultureInfo.InvariantCulture)
         ).FirstOrDefault