2014-01-16 4 views
0

Я написал следующий LINQ запрос для соединения двух таблиц на основе общего (то, что я думал, что будет) целочисленные:LINQ Join On Int = Char DataTypes?

Dim test = 
    (From forecast In dtForecast.AsEnumerable() Join dns In dtDns.AsEnumerable() 
     On forecast.Field(Of Int32)("BrandId") 
     Equals dns.Field(Of Int32)("SalesCategory01Code") 
    Select New With 
    { 
     .Key = forecast.Field(Of String)("BrandName") 
    }).ToList() 

Однако, он бросает исключение Specified cast is not valid

Я с тех пор обнаружил, что столбец BrandId - int, а столбец SalesCategory01Code устанавливается как char(6).

Можно ли изменить это и сделать работу соединения с помощью LINQ?

+0

Как вы хотите, чтобы 'char (6)' преобразовывался в 'int', когда' int' имеет только 4 байта? – MarcinJuraszek

+0

@MarcinJuraszek Я думаю, что это больше проблема с дизайном базы данных, так как «MAX (SalesCategory01Code)» из базы данных «600». – TimeBomb006

ответ

1

SQL nchar отображений в C# string (http://social.msdn.microsoft.com/), так отбрасываемой его соответствующим образом и использовать Int32.Parse:

Dim test = 
    (From forecast In dtForecast.AsEnumerable() Join dns In dtDns.AsEnumerable() 
     On forecast.Field(Of Int32)("BrandId") 
     Equals Int32.Parse(dns.Field(Of String)("SalesCategory01Code")) 
    Select New With 
    { 
     .Key = forecast.Field(Of String)("BrandName") 
    }).ToList() 

Вы также можете изменить свой SQL запрос, который выбирает данные и бросали его там:

SELECT SalesCategory01Code = CAST(SalesCategory01Code as int)... 
+0

'char (1)' отображается в 'char' в моем мире SQL/C#. – user2864740