Как преобразовать запрос Sql Datetime в Linq

#c# #linq #model-view-controller

#c# #linq #модель-представление-контроллер

Вопрос:

 select * from Employees where DataofJoin ='2005-01-01 00:00:00.000'
  

Я написал этот запрос Linq как

 public JsonResult Dif() 
{
    var ss = Convert.ToDateTime("2001-01-01 00:00:00.000");
    var x = (from n in db.Employees
                where n.DataofBirth == ss
                select n).First();

    return new JsonResult { JsonRequestBehavior = JsonRequestBehavior.AllowGet };
}
  

Но он выдает следующую ошибку:

 "An exception of type 'System.InvalidOperationException' occurred in System.Core.dll 
but was not handled in user code"
  

Комментарии:

1. Пожалуйста, покажите нам свой stacktrace

2. Что такое StackTrce

3. Название вопроса полностью вводит в заблуждение, не имеет ничего общего с преобразованием запроса Sql Datetime

4. Я не понимаю, что должен делать ваш код. Вы создаете экземпляр объекта DataTime, выполняете запрос linq, сохраняете результат в x и возвращаете новый JsonResult. Но вы никогда ничему не присваиваете значение x.

Ответ №1:

Насколько я могу понять, эта проблема связана с попыткой получить элемент из пустого объекта.

Потому что вы выполняете вызов .First() , и запрос возвращает пустой результат. Итак, если вы выполняете запрос obj.First() для пустого объекта, он выдает исключение. Используйте obj.FirstOrDefault() , чтобы избежать исключения.

И если Linq не возвращает данные, это проблема, тогда используйте Sql Profiler, чтобы проверить, какой запрос был вызван, или измените фильтр даты соответствующим образом.

Чтобы избежать ошибок, используйте —

     var x = (from n in db.Employees
             where n.DataofBirth == ss
             select n).FirstOrDefault();
  

Обновить

Для получения правильной даты сделайте что-то вроде этого.

var ss = new DateTime (2005,01,01,0,0,0); //use this date in linq query

Надеюсь, это вам поможет.

Комментарии:

1. вот почему sql принимает нулевые значения, когда я ввожу через sql-запрос типа select * from Employees, где DataofJoin =’2005-01-01 00:00:00.000′, это дало мне Exeact ans

2. поскольку интерпретация date была изменена с Linq на sql, это не так, как вы хотите, чтобы это было. Позвольте мне обновить ответ, чтобы помочь вам.