powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Выполнение LINQ-запроса внутри условного оператора
25 сообщений из 220, страница 1 из 9
Выполнение LINQ-запроса внутри условного оператора
    #39155134
Иван215
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, как сделать простую вещь - выполнить LINQ-запрос внутри условного оператора:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
If md = 1 Then
            Dim Q_Rec = _
                From RT In DT.AsEnumerable() _
                Where CStr(RT!PROFCODE) = "37" _
                Select New With { _
                    .ID = RT!ID, _
                    .CODE_LPU = RT.Field(Of String)("CODE_LPU"), _
                    .PROFCODE = RT.Field(Of String)("PROFCODE"), _
                    .USL_OK = RT.Field(Of Long)("USL_OK")}
        Else
            Dim Q_Rec = _
                From RT In DT.AsEnumerable() _
                Where CStr(RT!PROFCODE) = "09" _
                Select New With { _
                    .ID = RT!ID, _
                    .CODE_LPU = RT.Field(Of String)("CODE_LPU"), _
                    .PROFCODE = RT.Field(Of String)("PROFCODE"), _
                    .CODE_USL = RT.Field(Of Long)("CODE_USL")}
        End If



Компилятор выдает ошибку - Q_Rec не объявлен, а предварительно объявить этот пресловутый анонимный тип выше моих сил.

Есть ли решение этой проблемы (кроме разнесения LINQ-запросов по разным процедурам)?
...
Рейтинг: 0 / 0
Выполнение LINQ-запроса внутри условного оператора
    #39155150
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как ты хочешь объявить Q_Rec предварительно, если он РАЗНЫЙ в двух запросах?

Делай в двух местах тернарный оператор, но четвертое поле типа придется назвать как-то универсально
...
Рейтинг: 0 / 0
Выполнение LINQ-запроса внутри условного оператора
    #39155153
Иван215
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да без разницы - пусть в первом случае будет Q_Rec1, а во втором Q_Rec2.

Пардон, а что такое тернарный оператор?
...
Рейтинг: 0 / 0
Выполнение LINQ-запроса внутри условного оператора
    #39155155
Иван215
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, забыл сказать - я пишу на VB.NET.
...
Рейтинг: 0 / 0
Выполнение LINQ-запроса внутри условного оператора
    #39155157
Иван215
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если не затруднит, приведите пример описания для данного конкретного случая (с Q_Rec1 и Q_Rec2)
...
Рейтинг: 0 / 0
Выполнение LINQ-запроса внутри условного оператора
    #39155159
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вообще не очень понимаю тогда, что требуется.

Если две разные ветки программы, в одной требуется Q_Rec1, а в другой Q_Rec2, то и программа тогда должна продолжаться внутри этих веток, там, где объявлены эти переменные, иначе неясен смысл ветвления, в результате которого получаются два разных результата двух разных типов.

Иван215а предварительно объявить этот пресловутый анонимный тип выше моих сил.ну во-первых тут два типа, а не один. И в чем проблема объявить типы не анонимно?
Иван215Пардон, а что такое тернарный оператор?If(bar = buz, cat, dog)
...
Рейтинг: 0 / 0
Выполнение LINQ-запроса внутри условного оператора
    #39155163
Иван215
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторИ в чем проблема объявить типы не анонимно?


Ну подскажите тогда как объявить тип не анонимно.

Я просто пример привел. Реальная процедура слишком большая. Смысл такой - нужно в одной процедуре выполнять разные LINQ-запросы в зависимости от некоторых условий, а потом обрабатывать результаты запросов - в одной процедуре обрабатывать, ветвление нежелательно - тогда придется результаты LINQ-запросов преобразовывать в таблицы DataTable и передавать их в вызывающую процедуру как параметр. Как передавать результат запроса в видепараметра вообще непонятно - ибо как можно передать НЕИЗВЕСТНО ЧТО в виде параметра.

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

Код: vbnet
1.
MsgBox(Q_Rec.GetType().ToString())



Такая жуть полезла, офигеть можно.
...
Рейтинг: 0 / 0
Выполнение LINQ-запроса внутри условного оператора
    #39155168
Иван215
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот написал простой запрос и посмотрел тип результата:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Dim Q_Rec = _
            From RT In DT.AsEnumerable() _
            Where Left(CStr(RT!PERSCODE), 1) = "7" _
            Select _
                RT!ID, _
                RT!CODE_LPU, _
                RT!PERSCODE, _
                RT!CODE_USL
       
        MsgBox(Q_Rec.GetType().ToString())



Получаю результат, смотри миниатюру.

Вставляю перед запросом описание:

Код: vbnet
1.
Dim Q_Rec As System.Data.EnumerableRowCollection`1[VB$AnonymousType_7`4[System.Object,System.Object,System.Object,System.Object]]



Компилятор сообщает - недопустимый символ (там где этот инопланетный штрих стоит в обратную сторону наклоненный).

Ну и как тип-то описать?
...
Рейтинг: 0 / 0
Выполнение LINQ-запроса внутри условного оператора
    #39155172
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван215Такая жуть полезла, офигеть можно.м-да. Полезла следующая жуть:Иван215как объявить тип не анонимно.Иван215Как передавать результат запроса в видепараметра вообще непонятноИван215как можно передать НЕИЗВЕСТНО ЧТО в виде параметра.Иван215эти дурацкие анонимные типыИван215анонимные типы очень плохая идеяИван215инопланетный штрих стоит в обратную сторону наклоненны

Все это означает, что вообще-то нужно открыть учебник по VB.NET и начать его читать, если даже встает вопрос о том, как объявить тип - а ведь объявление типов - одна из первых глав учебника.

Я, конечно, могу что-то подсказать точечно, но толку мало от этого - если в начальных знаниях даже не пробел, а прямо-таки черная дыра. Почитай про типы, про объявление типов, про универсальные (в других переводах "обобщенные" или "дженерики" (на жаргоне)) типы. Попробуй понять суть интерфейсов.


Иван215а потом обрабатывать результаты запросов - в одной процедуре обрабатыватьтак если в одной процедуре обрабатывать результат, то зачем тогда пытаться детально объявить какой-то тип (анонимно или явно), если эта детализация впоследствии утрачивается. Ну и объяви переменную Q_Rec как Object и присваивай ей что хочешь.
...
Рейтинг: 0 / 0
Выполнение LINQ-запроса внутри условного оператора
    #39155177
Иван215
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор Ну и объяви переменную Q_Rec как Object и присваивай ей что хочешь.



Ну, объявил:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
        Dim Q_Rec As Object

        Q_Rec = _
            From RT In DT.AsEnumerable() _
            Where Left(CStr(RT!PERSCODE), 1) = "7" _
            Select _
                RT!ID, _
                RT!CODE_LPU, _
                RT!PERSCODE, _
                RT!CODE_USL
        'End If

        MsgBox(Q_Rec.GetType().ToString())

        If Q_Rec.Count() = 0 Then
            MsgBox("Записей не найдено", MsgBoxStyle.Information, "Сообщение")
        Else



И получил, смотри миниатюру.

И прежде чем советовать, неплохо бы самому попробовать.
...
Рейтинг: 0 / 0
Выполнение LINQ-запроса внутри условного оператора
    #39155179
Иван215
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Теперь про черную дыру и учебники. У меня другой способ обучения - практический. Много, кстати всего уже прочитал. На хрена тогда форумы, пусть все читают учебники.

Мне практический совет нужен (озвучен выше). Лекции и чтение морали мне не в профицит.
...
Рейтинг: 0 / 0
Выполнение LINQ-запроса внутри условного оператора
    #39155180
Иван215
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автортак если в одной процедуре обрабатывать результат, то зачем тогда пытаться детально объявить какой-то тип


Ну написал же черным по белому - зачем - что компилятор ОШИБКУ НЕ ВЫДАВАЛ.
...
Рейтинг: 0 / 0
Выполнение LINQ-запроса внутри условного оператора
    #39155182
Иван215
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа форумчане, еще раз обращаюсь.

Подскажите пожалуйста (дайте практический совет) как сделать так чтобы нижеследующий фрагмент кода не выдавал ошибки компиляции (Q_REC1 и Q_Rec2 - не объявлены)

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
If md = 1 Then
            Dim Q_Rec1 = _
                From RT In DT.AsEnumerable() _
                Where Left(CStr(RT!PROFCODE), 1) = "7" _
                Select  _
                    RT!ID, _
                    RT!CODE_LPU, _
                    RT!PERSCODE, _
                    RT!CODE_USL
Else
            Dim Q_Rec2 = _
                From RT In DT.AsEnumerable() _
                Where CStr(RT!PROFCODE) = "09" _
                Select _
                    RT!ID, _
                    RT!CODE_LPU, _
                    RT!PROFCODE, _
                    RT!CODE_USL
End If

If md = 1 Then
   ' Обработка Q_Rec1
Else
   ' Обработка Q_Rec2
End If
...
Рейтинг: 0 / 0
Выполнение LINQ-запроса внутри условного оператора
    #39155183
Иван215
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторЯ, конечно, могу что-то подсказать точечно, но толку мало от этого


Можешь подсказать - так подскажи - о том и просьба была. А думать о том, сколько толку от этого будет - не твоя забота. Или ты педагог?
...
Рейтинг: 0 / 0
Выполнение LINQ-запроса внутри условного оператора
    #39155184
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван215У меня другой способ обучения - практический.Иван215зачем - что компилятор ОШИБКУ НЕ ВЫДАВАЛ.То есть нужно не программу нормально работающую сделать, не научиться делать правильно, не разобраться в механизмах работы, не иметь перспективу повышать свою квалификацию. Единственная задача - чтобы компилятор ошибку не выдавал.

Иван215На хрена тогда форумыДействительно, школы тоже нафиг не нужны. И правила дорожного движения. Если под машину достаточно быстро не попадешь, то методом тыка можно выяснить, что дорогу лучше переходить, когда на странном столбе с разноцветными лампочками горит зеленая.

Ок, учебник читать не будем, как работает Linq не знаем, что такое интерфейс IEnumerable в частности и интерфейсы в принципе - знать не хотим. Итак для чего же нужны форумы? Получается, чтобы за тебя делать ту работу, в которой ты не только не разбираешься (это поправимо, если есть желание), но и не хочешь разбираться (а вот тут уже тупик).

Итого: В учебнике есть ответ на твой вопрос. Если бы ты его прочитал, тебе бы не потребовалось обращаться на форум именно с этим вопросом. Но ты предпочитаешь такой вариант - ты ничего не делаешь, мы пишем тебе программу, ты получаешь за нее деньги, нам говоришь "большое спасибо". Прекрасный подход!


Почему выдает ошибку? Потому что у Object нет метода Count. Почему я дал совет использовать Object. А ты до этого ничего не говорил про Count. Что теперь делать? Использовать IEnumerable или IQueryable. Что это такое. Ну ё-моё, перепечатывать главы из учебника на форум занятие бессмысленное.

Иван215На хрена тогда форумыВот тут есть хороший ответ 16726098 Ах да - мы же не читатели, а там букв много. Ну ладно, тогда кратко - для того, чтобы отвечать на сложные вопросы, а не обучать азам языка.
...
Рейтинг: 0 / 0
Выполнение LINQ-запроса внутри условного оператора
    #39155187
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван215Господа форумчане, еще раз обращаюсь.

Подскажите пожалуйста (дайте практический совет) как сделать так чтобы нижеследующий фрагмент кода не выдавал ошибки компиляции (Q_REC1 и Q_Rec2 - не объявлены)

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
If md = 1 Then
            Dim Q_Rec1 = _
                From RT In DT.AsEnumerable() _
                Where Left(CStr(RT!PROFCODE), 1) = "7" _
                Select  _
                    RT!ID, _
                    RT!CODE_LPU, _
                    RT!PERSCODE, _
                    RT!CODE_USL
Else
            Dim Q_Rec2 = _
                From RT In DT.AsEnumerable() _
                Where CStr(RT!PROFCODE) = "09" _
                Select _
                    RT!ID, _
                    RT!CODE_LPU, _
                    RT!PROFCODE, _
                    RT!CODE_USL
End If

If md = 1 Then
   ' Обработка Q_Rec1
Else
   ' Обработка Q_Rec2
End If



Именно этот? Вот так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
If md = 1 Then
            Dim Q_Rec1 = _
                From RT In DT.AsEnumerable() _
                Where Left(CStr(RT!PROFCODE), 1) = "7" _
                Select  _
                    RT!ID, _
                    RT!CODE_LPU, _
                    RT!PERSCODE, _
                    RT!CODE_USL
            ' Обработка Q_Rec1
Else
            Dim Q_Rec2 = _
                From RT In DT.AsEnumerable() _
                Where CStr(RT!PROFCODE) = "09" _
                Select _
                    RT!ID, _
                    RT!CODE_LPU, _
                    RT!PROFCODE, _
                    RT!CODE_USL
            ' Обработка Q_Rec2
End If
...
Рейтинг: 0 / 0
Выполнение LINQ-запроса внутри условного оператора
    #39155188
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван215Можешь подсказать - так подскажи - о том и просьба была. А ты перечитай сначала. Я даю подсказку - ты следующим шагом упираешься в следующую проблему и так несколько раз.
Иван215А думать о том, сколько толку от этого будет - не твоя забота.Так я заранее вижу, что толку не будет, что и доказывают последующие грабли, на которые ты натыкаешься
...
Рейтинг: 0 / 0
Выполнение LINQ-запроса внутри условного оператора
    #39155191
Иван215
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
... Повторяю еще раз - РАДИОСТАНЦИЯ НА БРОНЕТРАНСПОРТЕРЕ! Да не работает же. Компилятор ошибку выдает - Q_Rec1 и Q_Rec2 - не объявлены.
...
Рейтинг: 0 / 0
Выполнение LINQ-запроса внутри условного оператора
    #39155192
Иван215
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я выполняю запрос:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Dim Q_Rec1 = _
                From RT In DT.AsEnumerable() _
                Where Left(CStr(RT!PROFCODE), 1) = "7" _
                Select  _
                    RT!ID, _
                    RT!CODE_LPU, _
                    RT!PERSCODE, _
                    RT!CODE_USL



В результате получаю некий объект - Q_Rec1.

И выходит следующее - я не могу (и пока ответа не получил, все подсказки какие-то) определить тип ЭТОГО ОБЪЕКТА, чтобы взять
и перед запросом написать оператор:

Код: vbnet
1.
Dim Q_Rec1 As ...



Нет ребята, это полное дерьмо.
...
Рейтинг: 0 / 0
Выполнение LINQ-запроса внутри условного оператора
    #39155244
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван215Нет ребята, это полное дерьмо.
Согласен, и нет ни малейшего желания в него погружаться.
...
Рейтинг: 0 / 0
Выполнение LINQ-запроса внутри условного оператора
    #39155256
Диклевич Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Dim Q_Rec 

        Q_Rec = _
            (From RT In DT.AsEnumerable() _
            Where Left(CStr(RT!PERSCODE), 1) = "7" _
            Select _
                RT!ID, _
                RT!CODE_LPU, _
                RT!PERSCODE, _
                RT!CODE_USL).ToList()
        'End If

        MsgBox(Q_Rec.GetType().ToString())

        If Q_Rec.Count() = 0 Then
            MsgBox("Записей не найдено", MsgBoxStyle.Information, "Сообщение")
        End If



Вот так все работает.

Тестовый пример:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
        Dim Q_Rec

        Q_Rec = _
            (From RT In {1, 2, 3, 7, 7, 7, 8} _
            Where RT = 7 _
            Select _
                RT).ToList()
        'End If

        MsgBox(Q_Rec.GetType().ToString())

        If Q_Rec.Count() = 0 Then
            MsgBox("Записей не найдено", MsgBoxStyle.Information, "Сообщение")
        End If
...
Рейтинг: 0 / 0
Выполнение LINQ-запроса внутри условного оператора
    #39155347
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван215,
Навига тебе if?
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
  Dim Q_Rec = _
                From RT In DT.AsEnumerable() _
                Where (CStr(RT!PROFCODE) = "37" AND md = 1)  OR (CStr(RT!PROFCODE) = "09")_
                Select New With { _
                    .ID = RT!ID, _
                    .CODE_LPU = RT.Field(Of String)("CODE_LPU"), _
                    .PROFCODE = RT.Field(Of String)("PROFCODE"), _
                    .USL_OK = RT.Field(Of Long)("USL_OK")}
...
Рейтинг: 0 / 0
Выполнение LINQ-запроса внутри условного оператора
    #39155361
Иван215
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо Александр, проверил - все работает. Не знаю как Вас благодарить - Вы залатали черную дыру в моих познаниях.
...
Рейтинг: 0 / 0
Выполнение LINQ-запроса внутри условного оператора
    #39155362
Иван215
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторНавига тебе if?


Я так понял вопрос звучит так: Нафига тебе If?

Отвечаю: Надо Федя, надо...
...
Рейтинг: 0 / 0
Выполнение LINQ-запроса внутри условного оператора
    #39155365
Иван215
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Евгений! Я просто пример выбрал неудачно - LINQ-запросы в разных ветках сильно похожи. Но мне нужно было универсальное решение - когда они могут сколь угодно сильно отличаться.
...
Рейтинг: 0 / 0
25 сообщений из 220, страница 1 из 9
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Выполнение LINQ-запроса внутри условного оператора
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]