#c# #linq #datetime #linq-to-entities
#c# #linq #дата и время #linq-to-entities
Вопрос:
Я внедряю простой поиск. Прямо сейчас я могу выполнять поиск по сообщениям, используя термины в разделении массива строк, но я хочу также выполнить поиск по дате. Итак, я добавил массив datetime. Проблема, с которой я сталкиваюсь, заключается в том, что я хочу искать только часть даты datetime и игнорировать время. Всякий раз, когда я выполняю поиск, я получаю ошибку в d.Date.
IEnumerable<Post> posts = from p in post_repository.Posts
from s in split
from d in Date
where (p.Title.Contains(s) || p.ContactPhone.Contains(s) || p.Content.Contains(s) || p.Author.Contains(s) || p.ContactEmail.Contains(s)|| **p.EndDate.Date.Equals(d.Date)**) amp;amp; p.Deleted == false amp;amp; p.Publish == true
select p;
Сообщение об ошибке:
The specified type member 'Date' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.NotSupportedException: The specified type member 'Date' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.
Я застрял на этом некоторое время, кто-нибудь может понять, что я делаю не так?
Все даты инициализированы, поэтому нет ничего нулевого, и все, кроме даты, работает. Если я удалю d.Дата или EndDate.Date, ошибки нет, но я не получаю желаемого результата.
Заранее спасибо.
Редактировать 1:
string[] split = query.Split(breakpoints);
DateTime[] arrayOfDateTimes = Datify(split);
Объявление может показаться действительно глупым. Datify — это функция, которую я написал, которая возвращает массив DateTime, который работает должным образом, потому что я прошел через это шаг за шагом, просматривая локальные переменные.
private readonly char[] breakpoints = {'.', ',', ' ', ':', 't' };
Запрос — это поиск, это строка.
Комментарии:
1. Можете ли вы разделить то, что, по вашему мнению, делает ваш запрос? И предоставление нам объявления о том, что такое
split
иDate
, тоже помогло бы. Как есть, эти второе и третьеfrom
выражения выглядят неправильно.2. Дата и время: 10/10/2010 12:36:…., Дата будет 10/10/2010 частью datetime. Я попытаюсь разделить его на части и написать, как это происходит.
3. @IAbstractDownvoteFactory Из-за вашего комментария я наконец понял это. Вместо даты я использовал день, месяц и год.
Ответ №1:
Используйте класс EntityFunction для обрезки временной части.
использование System.Data.Objects;
EntityFunctions.Время усечения (конечная дата)