Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> linq и перевод из десятиричного числа в шеснадцати 
V
    Опции темы
sinitsa
Дата 22.7.2011, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 22.7.2011

Репутация: нет
Всего: нет



Всем привет,

мне надо сделать линк запрос к таблице и выбрать оттуда все строки, где стасус jt.state равен 0x8007

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

Я создала  enum где всех шеснадцатиричных статусов, например:

Код


 enum JOBstateFlags
    {
        Downloading = 2000002,
        Queued = 4005,
        FinishedError = 407,
        FinishedError2 = 207,
        FinishedOK = 8007,
        Inactive = 8001,
        Delayed = 8000,
  }


Мой запрос выглядит так:

Код

var jobtargetsSuccess = from jt in data.jobtargets
                                    let value = string.Format("{0:x}", Convert.ToInt32(jt.state))
                                    where (jt.guid_job == guid_job)
                                    &&
                                    value == Convert.ToString( JOBstateFlags.FinishedОК)
                                     select jt;



В результате не выбрано ниодно значиние, а когда делаю Debug пошагово и смотрю значение переменной, то конечно значения у нее нет, но есть сообщение, что функция не поддерживается SQL, я подозреваю, что это из-за "string.Format("{0:x}", Convert.ToInt32(jt.state))"

Может кто-то знает как решить мою проблемму?

Заранее спасибо, 
Sinitsa
PM MAIL   Вверх
WarHog
Дата 23.7.2011, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 20.10.2007
Где: Воронеж

Репутация: 1
Всего: 2



Да, естественно, провайдер не может транслировать вызовы шарповских методов, таких как string.Format в sql-запрос (но, например, Linq2SQL сможет перевести Convert.ToInt32 в sql'ный CONVERT(Int,CONVERT(NVarChar, [некое поле])).
А почему просто не сделать
Код

var jobtargetsSuccess = data.jobtargets.Where(jt => jt.guid_job == guid_job && jt.state == (int)JOBstateFlags.FinishedОК)

? соответственно значение твоего шестнадцатеричного енума приведется к десятичному и сравнится с десятичным же полем в базе

Только енум нужно переделать т.о.
Код

enum JOBstateFlags
    {
        Downloading = 0x2000002,
        Queued = 0x4005,
        FinishedError = 0x407,
        FinishedError2 = 0x207,
        FinishedOK = 0x8007,
        Inactive = 0x8001,
        Delayed = 0x8000,
    }

, т.к. сейчас там не шестнадцатеричные статусы.

Да, и
Код

Convert.ToString(JOBstateFlags.FinishedОК)

вернет просто "FinishedОК". Если нужно его шестнадцатеричное строковое представление, то юзай Enum.Format
Код

Enum.Format(typeof(JOBstateFlags), JOBstateFlags.FinishedOK, "x")

--------------------
PM MAIL   Вверх
sinitsa
Дата 25.7.2011, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 22.7.2011

Репутация: нет
Всего: нет



Спасибо большое,
 
все работает.
Краткий вид линка я не использовала, тк "развернутый" больше похож на SQL и лучше читаемый и понимаемый теми, кто LINQ не знает. Я пишу дипломку на фирме и не факт, что они меня оставят, но тут никто не знает ни C# ни LINQ, так что я решила писать развернуто..

Все равно спасибо ОГРОМНОЕ!



Это сообщение отредактировал(а) sinitsa - 25.7.2011, 14:22
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | LINQ (Language-Integrated Query) | Следующая тема »


 




[ Время генерации скрипта: 0.0742 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.