Сравнение строкового столбца с столбцом Int - PullRequest
2 голосов
/ 28 мая 2011

Я работаю над разработкой EF CTP5 Code First с существующей базой данных. Мне нужно получить данные из двух таблиц путем сравнения столбцов разных типов.

Например - Здесь p.ColumnA равно varchar, а q.ColumnA равно int, но значения могут быть одинаковыми для нескольких записей. Итак, я пытаюсь сделать Convert.ToInt32, который не работает. У меня нет полного контроля над базой данных для изменения таблицы.

from p in context.TableA
from q in context.TableB
where p.ColumnZ == "ABC" &&
  (p.ColumnA == null || Convert.ToInt32(p.ColumnA) == q.ColumnA) &&
  (p.ColumnB == null || p.ColumnB == q.ColumnB)
select p.ColumnC

Может кто-нибудь предложить решение? Спасибо.

Ответы [ 2 ]

3 голосов
/ 28 мая 2011

Когда вы пишете оператор linq, который взаимодействует с сущностью, он пытается преобразовать все команды в SQL.Поскольку для Convert.ToInt32 нет команды sql, возникает ошибка. В этом посте описан способ вызова функций sql для преобразования типов.Это должно помочь вам.

1 голос
/ 28 мая 2011

Как объяснили другие авторы, LINQ to SQL Сущности не знают, как перевести Convert.ToInt32 в выражение SQL (LINQ to SQL, очевидно, может справиться с этим). Из того, что я могу сказать, он также не поддерживает int.Parse. Но так как вы просто проводите сравнение на равенство (а не больше / меньше чем), вы должны быть в состоянии достичь того же результата путем преобразования int в string вместо преобразования string в int.

from p in context.TableA
from q in context.TableB
where p.ColumnZ == "ABC" &&
  (p.ColumnA == null || p.ColumnA == q.ColumnA.ToString()) &&
  (p.ColumnB == null || p.ColumnB == q.ColumnB)
select p.ColumnC
...