none
Проверка сортировки в запросе LINQ RRS feed

  • Вопрос

  • Добрый день.

    Вот такой код не работает и нет ошибок

                 var data = (from c in db.Users
                                        where c.userID == _sc.userID && c.sPl > 0
                                        orderby c.dateTimeL descending
                                        select c).FirstOrDefault();

    Не работает он вот почему

    orderby c.dateTimeL descending

    Т.к. это поле dateTimeL может оказаться пустым.

    А все остальные условия where c.userID == _sc.userID && c.sPl > 0 выполняются

    Как можно проверить поле dateTimeL перед сортировкой в самом запросе?

    Спасибо

    29 июня 2016 г. 10:16

Ответы

Все ответы

  • Добрый день

    where c.userID == _sc.userID && c.sPl > 0 && c.dateTimeL != null

    • Помечено в качестве ответа DevingAs 29 июня 2016 г. 11:45
    29 июня 2016 г. 11:43
    Отвечающий
  • В общем я не стал новый вопрос издавать. Напишу здесь. Я неправильно там вопрос озвучивал. Поставил ответ т.к. сам не до конца раскрыл вопроса, но свой вопрос так и не решил :)

    Смысл вопроса такой.

    Если поле dateTimeL !=null то сортировку делаем, а если равно null то просто запрос без сортировки. Т.е. проверка поля dateTimeL примерно так

    orderby c.dateTimeL where c.dateTimeL !=null descending

    Но так не работает

    А помню где то вроде что-то подобное видел

    • Изменено DevingAs 29 июня 2016 г. 13:45
    29 июня 2016 г. 13:44
  • Так не может работать.

    Еще раз. В чем задача? Что хочется получить на выходе? Например: мне нужно найти запись с максимальной датой, а если записей с датой нет, то устроит с датой равной null. Или что вам нужно выбрать?

    29 июня 2016 г. 13:49
    Отвечающий
  • Мне нужно выбрать людей Если у них стоят даты например рождения, то отсортировать по дате рождения, если даты рождения не стоят, то просто выборка всех людей без сортировки по дате.



    • Изменено DevingAs 29 июня 2016 г. 14:19
    29 июня 2016 г. 14:19
  • FirstOrDefault - это в лучшем случае один, а не люди. Каким критериям он должен соответствовать?
    • Помечено в качестве ответа DevingAs 29 июня 2016 г. 16:07
    29 июня 2016 г. 14:22
    Отвечающий
  • Прошу прощения Алексей. Отвлекли.

    Я сначала написал чего хотел, но пока писал, то понял что конечная цель действительно немного не та. И первый Ваш ответ подходит. Переделал немного логику происходящего и всё получилось. Спасибо за помощь


    • Изменено DevingAs 29 июня 2016 г. 16:19
    29 июня 2016 г. 16:15
  • Я бы сделал два запроса:

    var user = db.Users.Where(c => c.userID == _sc.userID && c.sPl > 0 && c.dateTimeL != null).OrderBy(c => c.dateTimeL).LastOrDefault();
    if (user == null)
    {
        user = db.Users.Where(c => c.userID == _sc.userID && c.sPl > 0).LastOrDefault();
    }

    30 июня 2016 г. 6:19
    Отвечающий