8 / 8 / 2
Регистрация: 30.01.2015
Сообщений: 157
1

Использование ИЛИ в LINQ

28.04.2022, 14:58. Показов 1141. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Ситуация простая, но не могу понять почему формируется не правильный запрос.

Запрос должен быть таким, он выводит например 20 строк
SQL
1
2
SELECT * FROM TABLE
WHERE DateEnd <= CONVERT(datetime,  '28.04.2022', 104) AND STATUS NOT IN (1,5)
Формирую его с помощь LINQ. Выводит 30 строк
C
1
var list = db.Table.Where(c => c.DateEnd <= dateNow && (c.Status != 2 || c.Status != 4) ).ToList();
Я понимаю что у меня ошибка в формировании запроса, но не пойму почему?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.04.2022, 14:58
Ответы с готовыми решениями:

Linq или не Linq. Linq медленней стандартных методов?
Есть у нас два массива, нужно найти совпадения в первом из второго. Два варианта реализации, первый...

Использование Krypton компонентов и linq
Решил приукрасить проект с данными компонентами. Но столкнулся с проблемой, не могу использовать ...

Использование MetadataType с Linq Mapping
Привет всем! Проблема в следующем: 1) есть класс бизнес-модели Settings: public partial class...

Использование LIKE в LINQ в ASP.NET MVC
в SQL Server есть база с таблицей Smetas в ней поле Str nchar(5) там есть записи : 01 0101...

11
2865 / 1983 / 369
Регистрация: 14.08.2018
Сообщений: 6,464
Записей в блоге: 4
28.04.2022, 15:53 2
Mudrec, может будет полезно - The NOT IN clause in LINQ to SQL

Добавлено через 1 минуту
Или вот еще - "NOT IN" clause in LINQ to Entities
0
Эксперт .NET
12567 / 8737 / 1311
Регистрация: 21.01.2016
Сообщений: 32,773
28.04.2022, 17:15 3
Цитата Сообщение от Mudrec Посмотреть сообщение
STATUS NOT IN (1,5)
Цитата Сообщение от Mudrec Посмотреть сообщение
(c.Status != 2 || c.Status != 4)
Действительно, в чём же может быть проблема?..
0
8 / 8 / 2
Регистрация: 30.01.2015
Сообщений: 157
28.04.2022, 17:50  [ТС] 4
Нет, то опечатка. Решил этот вопрос как выше в сообщении. Сначала выбрал все записи с нужным мне статусом, а потом с помощью Линка добавил чтобы эти записи не вошли. Завтра решение на пишу, как буду возле компьютера
0
Эксперт .NET
12567 / 8737 / 1311
Регистрация: 21.01.2016
Сообщений: 32,773
29.04.2022, 07:53 5
Цитата Сообщение от Mudrec Посмотреть сообщение
Сначала выбрал все записи с нужным мне статусом, а потом с помощью Линка добавил чтобы эти записи не вошли.
Звучит как страшный костыль.
0
1289 / 868 / 258
Регистрация: 08.08.2014
Сообщений: 2,483
29.04.2022, 08:52 6
Лучший ответ Сообщение было отмечено Usaga как решение

Решение

Mudrec
C#
1
2
3
4
5
6
7
    var dateNow = DateTime.Now;
    var excludeStatuses = new List<int>() { 1, 5 };
 
    var items = _context
        .Table
        .Where(t => t.DateEnd <= dateNow && !excludeStatuses.Contains(t.Status))
        .ToList();
0
8 / 8 / 2
Регистрация: 30.01.2015
Сообщений: 157
29.04.2022, 09:29  [ТС] 7
Да фактически так и сделал.

Мой вариант:
C#
1
2
3
4
//Выбрал статус 1 и 5
List<int> listStatus_1_5 = db.Table.Where(c => c.Status == 1 || c.Status == 5).Select(c=> c.ID).ToList();
//А здесь исключил эти статусы
db.Table.Where(c => c.DateEnd <= dateNow && !listStatus_2_4.Contains(c.ID)).ToList());
Добавлено через 3 минуты
Цитата Сообщение от Usaga Посмотреть сообщение
Звучит как страшный костыль
Да хз, может и есть костыль, но ничего лучшего не придумал.
0
2865 / 1983 / 369
Регистрация: 14.08.2018
Сообщений: 6,464
Записей в блоге: 4
29.04.2022, 09:31 8
Вот EF какая штука, вроде бы совсем простой запрос, это если конечно его делать через ADO, а городить приходится аж два запроса...
0
1289 / 868 / 258
Регистрация: 08.08.2014
Сообщений: 2,483
29.04.2022, 09:37 9
C#
1
2
3
4
//Выбрал статус 1 и 5
List<int> listStatus_1_5 = db.Table.Where(c => c.Status == 1 || c.Status == 5).Select(c=> c.ID).ToList();
//А здесь исключил эти статусы
db.Table.Where(c => c.DateEnd <= dateNow && !listStatus_2_4.Contains(c.ID)).ToList());
Так категорически не надо делать. У вас размер текста второго запроса в этом случае будет напрямую зависеть от количества записей в базе. В итоге вы можете получить SQL-запрос, где in-оператору будет на вход передаваться огромная строка, и сервер БД с этим будет плохо справляться.

Добавлено через 1 минуту
Тот вариант, что я предложил, делает совсем другое - он сразу одним запросом формирует тот SQL, который вы указали в первом сообщении.
2
Usaga
29.04.2022, 09:39
  #10

Не по теме:

Andrey-MSK, это не вина EF'а. Им тоже надо уметь пользоваться.

0
8 / 8 / 2
Регистрация: 30.01.2015
Сообщений: 157
29.04.2022, 09:50  [ТС] 11
Цитата Сообщение от kotelok Посмотреть сообщение
Тот вариант, что я предложил, делает совсем другое - он сразу одним запросом формирует тот SQL, который вы указали в первом сообщении.
Спасибо огромное, понял, переделаю!
0
1150 / 858 / 263
Регистрация: 30.04.2009
Сообщений: 3,598
01.05.2022, 11:30 12
Mudrec, у вам проблемы с пониманием булевой логики.
NOT IN (X,Y) = NOT X AND NOT Y
0
01.05.2022, 11:30
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.05.2022, 11:30
Помогаю со студенческими работами здесь

Обработка двумерных массивов с использование linq
Здравствуйте! Стоит задача, удалить из квадратной матрицы (представленной в виде двумерного...

Использование результата LINQ в качестве DataSource ComboBox
Добрый день! У меня имеется DataTable. К ней я делаю LINQ запрос на выборку с группировкой и...

Задача на использование LINQ
Дано целое число K (&gt; 0) и последовательность непустых строк A. Строки последовательности содержат...

Использование Linq в .NET 4.0
Пытался перевести код с шарпа на пабс.нет Int min = list.Min(x=&gt;x.ToString().Length); Грубо...

LINQ to XML: использование атрибутов
привет всем, нужна помощь, в шарпе не силён есть вот такой кусок кода: XDocument xDocument =...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

Новые блоги и статьи
Что такое HCL Notes и как с ним работать
InfoMaster 10.01.2025
HCL Notes (ранее известный как IBM Notes и Lotus Notes) представляет собой комплексную платформу для совместной работы и обмена информацией в корпоративной среде. Это многофункциональное решение,. . .
Как работать с Git из Windows и Visual Studio
InfoMaster 10.01.2025
Работа с Git в Windows Работа с Git в операционной системе Windows может быть осуществлена с помощью различных инструментов, каждый из которых обладает своими уникальными возможностями и. . .
Аналог оператора switch case в Python
InfoMaster 10.01.2025
Оператор switch case используется в программировании для выбора одного из нескольких вариантов исполнения кода. Однако в языке Python этот оператор отсутствует. Понимание аналогов switch case в. . .
Отличия абстрактного класса от интерфейса
InfoMaster 10.01.2025
В современной разработке программного обеспечения существуют два основных механизма реализации абстракции: абстрактные классы и интерфейсы. Эти инструменты, хотя и схожи в своей основной цели -. . .
Как работать в Git
InfoMaster 10.01.2025
Git — это одна из наиболее популярных систем контроля версий, которая активно используется разработчиками по всему миру. Она позволяет эффективно управлять изменениями в коде, координировать работу. . .
Реализация передвижения персонажа в Unity3d на C#
InfoMaster 10.01.2025
Реализация передвижения персонажа в Unity3D начинается с правильной настройки проекта. Этот этап критически важен для создания отзывчивого и плавного управления. Рассмотрим основные шаги для создания. . .
Docker: руководство для начинающих
InfoMaster 10.01.2025
В современном мире разработки программного обеспечения контейнеризация стала неотъемлемой частью процесса создания и развертывания приложений. Docker, как ведущая платформа контейнеризации, произвела. . .
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru