Вопрос по sql-server, entity-framework, c#, sql-server-2008 – Преобразование строки в int в linq для объектов в большой базе данных

3

я хочу преобразовать строку в int в linq для сущностей, но Convert.ToInt32 и int.Parse не может перевести в sql И моя база данных БОЛЬШАЯ и не может получить все из них в память (более 60 тыс. Записей и больше) мой запрос что-то вроде

int myNumber = 1390;
var result = from dr in myEntitiy.TableX
             where (Convert.ToInt32(dr.stringYear) > myNumber) // <== error
             select dr; 

ошибка сказать не может перевести метод преобразования

LINQ to Entities does not recognize the method 'Int32 ToInt32(System.String)' method, and this method cannot be translated into a store expression.

какое решение

ОБНОВИТЬ : Если нет способа сделать это, пожалуйста, убедитесь в этом, я должен изменить тип поля в базе данных, но это будет сложно :(

ты можешь использовать словарь? Когда вы говорите, что база данных находится в Интернете, вы имеете в виду облако? ironman
Можете ли вы попытаться сделать преобразование в первую очередь? Сохраните результаты в списке, а затем проведите сравнение ironman
глупый сделал это: / и я не могу изменить это сейчас mX64
как я сказал, это большая база данных, и я не могу сделать это, как (.ToList или .AsEnumerable), а также база данных находится в Интернете mX64
Почему вы держите год в виде строки? Jon

Ваш Ответ

2   ответа
3

что сравнение в виде строки вполне безопасно, если у вас нет лет & lt; 1000 или & gt; 9999:

... dr.stringYear.CompareTo(myNumberString) > 0

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

Error: User Rate Limit Exceeded mX64
Error: User Rate Limit Exceeded mX64
SomeoneError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
1

int myNumber = 1390;
var result = from dr in myEntitiy.TableX
             let num = myEntitiy.TableX.Take(1).Select(x => dr.stringYear).Cast<int>().FirstOrDefault()
             where num > myNumber
             select dr; 
Error: User Rate Limit Exceeded

Похожие вопросы