LINQ to SQL не может привести Int32 к String - как это возможно? - PullRequest
1 голос
/ 06 ноября 2010

Я получаю эту ошибку

  Unable to cast object of type 'System.Int32' to type 'System.String'. 

при выполнении стандартного запроса LINQ to 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
   ...

Два вопроса:

  1. Как получается, что Int32 не может быть приведен к String?
  2. Как я могу отладить что-то такое?Поскольку все это происходит глубоко в недрах LINQ, я даже не могу получить никаких сведений о том, в какой области это раздражает.

Ответы [ 4 ]

3 голосов
/ 06 ноября 2010

Возможно, ваше отображение сущностей неправильно отображает int в строку где-нибудь? Проверьте сопоставление для каждого свойства информационных бюллетеней.

0 голосов
/ 06 ноября 2010

Ну, вы не можете привести int к строке, потому что типы несовместимы, но вы можете преобразовать его.Я подозреваю, что это так просто:

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

Поскольку локальная переменная является строкой, а столбец базы данных является целым числом.

0 голосов
/ 06 ноября 2010

Int32 нельзя преобразовать в String, поскольку они совсем не одного типа. Вы можете преобразовать Int32 в String через ToString, но нет доступных бросков.

Из этого простого утверждения я должен был бы догадаться, что n.NewsletterID и NewsletterID не одного типа. Нужно преобразовать в Int32 или String, например

  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

в зависимости от того, какой тип находится на каждой стороне выражения.

0 голосов
/ 06 ноября 2010

один из 2: либо

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

, либо

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

до н.э. это наиболее вероятные разные типы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...