2014-01-09 3 views
1

Я проверил множество сообщений с этой ошибкой, но ни одна из них не имела этой конкретной проблемы. (Кроме того, я новичок в диез был ява DEV)Linq Указанный литой недействителен

Я получаю исключение, как

System.InvalidCastException был пойман

на table2.Field (» MEME_CK ") ниже в фрагменте кода.

Есть около 3K строк в table2, я не мог найти способ, чтобы избежать неправильной отливки для линии table2.Field («MEME_CK»)

Данные может быть либо пустым, нет, действительным или недействительным. Поэтому я попытался использовать оператор с нулевым значением для генерирования общих параметров. Также видел класс DBNull, который может представлять несуществующее значение.

Есть ли способ предварительно обработать данные столбцов перед тем, как сделать «равный тест» или присоединиться к коду ниже? Как я могу избежать кастинга даже после использования типа NULL?

Следующий код в основном выполняет объединение двух таблиц данных на основе MemberID i.e MEME_CK или MemeCk и создает новый объект с CapHeadID, MemeCk и т. Д. В качестве полей.

var query = 


     (from table1 in searchResult.AsEnumerable() 
     join table2 in memberInfo.AsEnumerable() 
     on table1.Field<decimal?>("MemeCk") equals 
      table2.Field<decimal?>("MEME_CK") 
     select new 
     { 
       CapHeadID = table1.Field<decimal>("CapHeadID"), 

      MemeCk = table1.Field<decimal>("MemeCk"), 

      Suffix = table2.Field<decimal>("MEME_SFX"), 

      Suscriber = table2.Field<string>("SBSB_ID"), 

       BusinessArea = table2.Field<string>("TEAM"), 

      MemberName = table2.Field<string>("MemberName"), 

      WorkTypeName = table1.Field<string>("WrkName"), 

      SSN = table2.Field<string>("MEME_SSN"), 

      AssignedUser = table1.Field<string>("AssignedUser") 

     }).Distinct().OrderBy(a => (a.Suscriber.IsNotNil() ? 

a.Suscriber : "")).Take(3000); 
+1

Было бы полезно, если вы можете объяснить, что делает этот код. Это кажется излишне запутанным. –

+0

Извините. Я добавил описание для приведенного выше кода. – amit

+0

Что такое базовый тип SQL для 'MEME_CK'? –

ответ

0

Вы используете AsEnumerable для преобразования запросов от IQueryable ... в основном это означает, что LINQ не будет пытаться генерировать код SQL для объединения и объединения будет сделано в C#.

Имея это в виду, вы могли бы попытаться просто получить их в качестве объектов - как это:

from table1 in searchResult.AsEnumerable() 
    join table2 in memberInfo.AsEnumerable() 
    on table1.Field<object>("MemeCk") equals 
     table2.Field<object>("MEME_CK") 
    select new... 

Я не уверен, если это будет работать, но это может сделать

+0

Спасибо, что он прошел мимо запроса, но дал результат как «Перечисление не дало никаких результатов» – amit

Смежные вопросы