большая проблема в преобразовании строки в datetime с использованием linq-to-entity

Как преобразовать строку в datetime, используя linq для объектов ….

У меня есть следующий запрос, где тип данных столбца visit_date является строкой …

 var memberl = from v in abc.visits join m in abc.members on v.member_Id equals m.member_Id where Convert.ToDateTime(v.visit_Date) >= startdate && Convert.ToDateTime(v.visit_Date) <= enddate group m by new { m.member_Firstname, m.member_Lastname, m.member_Id } into g orderby g.Count() select new { numVisits = g.Count(), firstname = g.Key.member_Firstname, lastname = g.Key.member_Lastname }; 

К сожалению, я не могу изменить схему …

У меня есть ошибка:

 linq to entites does not recognise Convert.ToDatetime method 

Есть ли возможное решение для преобразования строки в Datetime?

Обновленный код:

по запросу Я обновил свой вопрос

  var data = (from v in abc.visits join m in abc.members on v.member_Id equals m.member_Id select new { MemberID = v.member_Id, VisiteDate = v.visit_Date, FirstName = m.member_Firstname, LastName = m.member_Lastname }).ToList(); var membersdata = from d in data where Convert.ToDateTime(d.VisiteDate) >= startdate && Convert.ToDateTime(d.VisiteDate) <= enddate group m by new { d.FirstName, d.LastName, d.MemberID } into g orderby g.Count() select new { numVisits = g.Count(), firstname = g.Key.FirstName, lastname = g.Key.LastName }; 

Я не думаю, что EF поддерживает перевод для преобразования String to DateTime или наоборот.

Как я вижу, у вас есть два варианта, в зависимости от формата даты в поле строки:

Если формат довольно простой, может быть достаточно сравнения строк:

 // Convert the boundaries to strings first // TODO: Set the ToString format option to match the database format string startDateAsString = startdate.ToString("yyyyMMdd"); string endDateAsString = enddate.ToString("yyyyMMdd"); // Query based on string comparison var memberl = from v in abc.visits join m in abc.members on v.member_Id equals m.member_Id where v.visit_Date.CompareTo(startDateAsString) >= 0 && v.visit_Date.CompareTo(endDateAsString) <= 0 group m by new { m.member_Firstname, m.member_Lastname, m.member_Id } into g orderby g.Count() select new { numVisits = g.Count(), firstname = g.Key.member_Firstname, lastname = g.Key.member_Lastname }; 

Если строковое представление даты более сложное, и простое сравнение строк не может помочь, вы можете подумать о создании view в таблице visits , что делает преобразование для вас на уровне базы данных:

 CREATE VIEW VisitsWithDate (MemberId, VisitDate) AS SELECT MemberId, Convert(datetime, VisitDate, 112) -- For instance FROM Visits 

Затем следует импортировать это представление в ваш DataModel. Возможно, вам понадобится сделать магию, чтобы заставить отношения работать.

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

Convert.ToDatetime поддерживается Linq2SQL. Единственный поддерживаемый метод Linq для сущностей: http://msdn.microsoft.com/en-us/library/bb738681.aspx

о вашей проблеме … попробуйте преобразовать startdate и enddate в строку и сравнить строковое значение в выражении linq.

Сначала попробуйте преобразовать результаты в List<> и отфильтруйте результаты из списка:

 var data = (from v in abc.visits join m in abc.members on v.member_Id equals m.member_Id select new { MemberID = v.member_id, VisiteDate = v.visit_date, FirstName = m.member_FirstName, LastName = m.member_LastName }).ToList(); var memberl = from d in data where Convert.ToDateTime(d.VisitDate) >= startdate && Convert.ToDateTime(d.VisitDate) <= enddate group d by new { d.FirstName, d.LastName, d.MemberID } into g orderby g.Count() select new { numVisits = g.Count(), firstname = g.Key.FirstName, lastname = g.Key.LastName }; 

Поскольку DateTime и DateTimeOffset являются структурами, они не являются обнуляемыми. Когда вам нужна нулеустойчивость, есть два пути:

  1. Используйте тип Nullable (например, DateTime? Или DateTimeOffset?).
  2. Используйте статическое поле DateTime.MinValue или DateTimeOffset.MinValue (значения по умолчанию для этих типов)
  • C # WinForms ErrorProvider Control
  • Панель c # для рисования графики и прокрутки
  • как связать datatable с datagridview в c #
  • Цвет фона элемента ListBox (winforms)
  • как отключить копирование, Вставить и удалить функции в текстовом поле с помощью C #
  • Панель не получает фокус
  • Выполняется ли в System.Windows.Forms.Timer другой stream, чем пользовательский интерфейс?
  • Как установить / изменить / удалить стиль фокусировки на кнопке в C #?
  • Добавить таймер в приложение Windows Forms
  • Как вызвать метод ежедневно, в определенное время, на C #?
  • ComboBox.SelectedText не дает мне SelectedText
  • Interesting Posts

    Как синхронизировать пользовательские ярлыки между двумя маками

    Странное поведение командной строки Windows

    В Java 8, почему емкость по умолчанию ArrayList равна нулю?

    Внедрение алгоритма сортировки Swift

    Проверять поля с помощью проверки JQuery без отправки?

    Выбор нескольких нечетных или четных столбцов / строк для фрейма данных

    Как объединить несколько изображений в одно изображение в Android?

    вызов деструктора явно

    SSH из общедоступной сети?

    Ошибка Eclipse DDMS «Невозможно связать с локальным 8600 для отладчика»

    Как выбрать страtagsю генерации идентификатора при использовании JPA и Hibernate

    Как принудительно переназначить сектора, о которых сообщается в SMART C5 (Текущий подсчет текущего сектора)?

    MVC3 и Entity Framework

    Любопытный синтаксис C # с вопросительным знаком

    Установленный установщик Inno Setup не показывает страницу «Выбрать место назначения» на некоторых системах

    Давайте будем гением компьютера.