Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
11 / 11 / 7
Регистрация: 23.12.2015
Сообщений: 950

LINQ ничего не возвращает, если в условии есть дата

24.03.2019, 13:38. Показов 2429. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть такой запрос:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
ublic void EditEmployeesFinishDate(Dictionary<string, DateTime> keyValuePairs, int id)
        {
            
            foreach (var a in keyValuePairs)
            {
                var entity = _context.AssetsItemsEmployes.Where(x => x.EmployeeId == a.Key && x.FinishDate == a.Value && x.AssetsItemsId == id)
                        .Select(x => x).FirstOrDefault();
                if (entity != null)
                {
                    entity.FinishDate = a.Value;
                    _context.DataContext.SubmitChanges();
                }
            }
        }
В таком виде он всегда возвращает null. Если же убираю дату, то он возвращает какие-то значения. Уже не знаю, что с этой датой делать Подскажите, пожалуйста
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.03.2019, 13:38
Ответы с готовыми решениями:

Как вернуть в запросе значение по умолчанию, если SELECT возвращает NULL или ничего не возвращает?
Добрый день! Например я хочу чтобы донное выражение возвращало мне 0 или скажем 1, если результатом выражения rating вернется NULL: ...

Что возвращает MySQL если select ничего не находит
Вопрос возник при написании серверной части на яве, которая должна проверить уникальность логина по бд. Насколько я себе представляю, при...

Написать функцию, которая получает на вход имя другой функции и возвращает саму функцию, если она есть и null, если нет.
Написать функцию, которая получает на вход имя другой функции, а на выходе возвращает саму функцию, если она есть и null, если нет ...

12
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
24.03.2019, 14:01
DenKG,
Возможно это из-за того, что в сравнении участвует компонент времени структуры DateTime.
Попробуйте сравнивать только компоненты даты: x.FinishDate.Date == a.Value.Date
0
11 / 11 / 7
Регистрация: 23.12.2015
Сообщений: 950
24.03.2019, 14:09  [ТС]
Даценд, пробовал уже. Ради эксперимента записывал в переменную результат a.Value.Date и в итоге получал дату с временем.

Добавлено через 3 минуты
Даценд, это может быть как-то связано с тем, что x.FinishDate у меня nullable?
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
24.03.2019, 14:22
Да, возможно.
Так попробуйте: ((DateTime)x.FinishDate).Date == a.Value.Date
0
11 / 11 / 7
Регистрация: 23.12.2015
Сообщений: 950
24.03.2019, 14:40  [ТС]
Даценд, Нет, всё равно null
0
Неадекват
 Аватар для freeba
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
24.03.2019, 15:06
DbFunction.Truncate в помощь.
0
11 / 11 / 7
Регистрация: 23.12.2015
Сообщений: 950
24.03.2019, 15:13  [ТС]
freeba, пробовал. Почему-то вылетает Exception с текстом, что это можно использовать только в LINQ запросах. А если это не LINQ, то что?

Добавлено через 2 минуты
freeba, Это же так делается?
C#
1
2
var entity = _context.AssetsItemsEmployes.Where(x => x.EmployeeId == a.Key && DbFunctions.TruncateTime(x.FinishDate) == DbFunctions.TruncateTime(a.Value) && x.AssetsItemsId == id)
                        .Select(x => x).FirstOrDefault();
Добавлено через 2 минуты
freeba, "This function can only be invoked from LINQ to Entities.". Вот, что получаю в Exception
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16125 / 11249 / 2888
Регистрация: 21.04.2018
Сообщений: 33,082
Записей в блоге: 2
24.03.2019, 15:59
DenKG, покажите что у Вас в коллекции _context.AssetsItemsEmployes: сделайте вывод в консоль
C#
1
Console.WriteLine(string.Join("\r\n", _context.AssetsItemsEmployes.Select(x => $"{x.EmployeeId}, {x.FinishDate}, {x.AssetsItemsId}")));
И скиньте сюда что вывелось. Если коллекция большая то не полностью а несколько строк, но часть из них с выполняемым условием
Так же покажите, что у Вас в переменных для сравнения
C#
1
Console.WriteLine($"{a.Key}, {a.Value}, {id}");
0
11 / 11 / 7
Регистрация: 23.12.2015
Сообщений: 950
24.03.2019, 16:04  [ТС]
Элд Хасп, это у меня веб-приложение, так что вместо консоли приложу таблицу из бд
id = 45
Миниатюры
LINQ ничего не возвращает, если в условии есть дата   LINQ ничего не возвращает, если в условии есть дата  
0
11 / 11 / 7
Регистрация: 23.12.2015
Сообщений: 950
24.03.2019, 16:06  [ТС]
Элд Хасп, а вот текст из SQL Profiler'а:
SQL
1
2
3
EXEC sp_executesql N'SELECT TOP (1) [t0].[Id], [t0].[AssetsItemsId], [t0].[EmployeeId], [t0].[StartDate], [t0].[FinishDate], [t0].[BusyStatus]
FROM [dbo].[AssetsItemsEmployes] AS [t0]
WHERE ([t0].[EmployeeId] = @p0) AND (CONVERT(DATE, CONVERT(DATETIME2, [t0].[FinishDate])) = @p1) AND ([t0].[AssetsItemsId] = @p2)',N'@p0 nvarchar(4000),@p1 datetime,@p2 int',@p0=N'dd5cdba4-7459-4e92-8fe4-42300aaca0bc',@p1='2019-03-17 00:00:00',@p2=45
При таком LINQ запросе:
C#
1
2
var entity = _context.AssetsItemsEmployes.Where(x => x.EmployeeId == a.Key && ((DateTime)x.FinishDate).Date == a.Value.Date && x.AssetsItemsId == id)
                        .Select(x => x).FirstOrDefault();
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16125 / 11249 / 2888
Регистрация: 21.04.2018
Сообщений: 33,082
Записей в блоге: 2
24.03.2019, 16:37
Лучший ответ Сообщение было отмечено Элд Хасп как решение

Решение

Цитата Сообщение от DenKG Посмотреть сообщение
это у меня веб-приложение, так что вместо консоли приложу таблицу из бд
По Вашим скринштам я не вижу совпадений между записями в БД и в словаре.
В словаре у Вас 3 даты 01, 17 и 18 марта 2019г. Ни одной такой даты в БД нет.
У Вас же есть ещё и дополнительное условие, кроме фильтра по дате и записи в БД должен быть x.AssetsItemsId == id

И такой вопрос, для сравнения Вам нужно полностью DateTime или только компонент Data из этого типа?
Если только Data, то и сравнивайте только его. Это поможет избежать случайных багов связанных с тем, что при различных приведениях/конвертациях Вы можете получить значения с одинаковыми Data, но разными Time и они не будут проходить фильтр.

Добавлено через 3 минуты
DenKG, SQL запрос в каком типе возвращает поле x.FinishDate?

Добавлено через 4 минуты
DenKG, так же для отладки замените анонимную функцию в предикате Where на внешнюю. В ней вычислите отдельно значение для каждой компоненты. И объедините их результат в return.
Тогда Вы получите возможно поставить точку останова (в Вашем случае с условием) и сможете в дебаге пошагово проверить какие переменные/поля содержат значения и результат их сравнения.
1
11 / 11 / 7
Регистрация: 23.12.2015
Сообщений: 950
24.03.2019, 19:33  [ТС]
Элд Хасп, омг, даже стыдно признаваться, что я не с теми датами сравнивал...
спасибо за направление на путь истинный )

Добавлено через 2 часа 50 минут
Элд Хасп, а как написать запрос, если у меня дата может быть null? Т.е. не просто тип данных такой, а реально есть поля, где дата банально не указана
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16125 / 11249 / 2888
Регистрация: 21.04.2018
Сообщений: 33,082
Записей в блоге: 2
25.03.2019, 00:44
Цитата Сообщение от DenKG Посмотреть сообщение
как написать запрос, если у меня дата может быть null? Т.е. не просто тип данных такой, а реально есть поля, где дата банально не указана
"По феншую" нужно приведение с проверкой. Что-то типа:
C#
1
                  ..... Where(x => x.FinishDate is DateTime date && date  == a.Value && ....). ...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.03.2019, 00:44
Помогаю со студенческими работами здесь

Перенос страницы в другой каталог, при условии если есть текст в урле через htaccess
На кулинарном сайте накопились статьи по определенным темам, что следует переместить в отдельный каталог, а то сейчас в перемешку Но как...

Есть массив дат, надо вывести первое значение и если разная дата
Ребят, не врубаюсь &lt;?php $event = array('2018-04-18 16:02:04', &quot;2018-04-17...

Нужно что-бы при нажатии на кнопку создавался файл ini или же, если он уже есть, то ничего не происходило
Нужно что-бы при нажатии на кнопку создавался файл ini или же если он уже есть то ничего не происходило, вот не создается. Помогите unit...

Скрывает блоке если есть определенный текст Например "Дата:"
Можно сделать что бы если в .miniblock находило слово например: &quot;Дата:&quot;, то блок .miniblock, скрывался? .profile_info .miniblock если...

Access запрос Есть два поля : дата начало и дата окончания
Есть два поля : дата начало и дата окончания. Если дата находиться в диапазоне то нужно выводить в поле &quot;важность&quot; запись...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru