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
...
两个问题:
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