У меня есть таблица базы данных, содержащая список опросов средней школы. У меня есть контроллер, который отображает список записей в таблице БД. Я пытаюсь разрешить пользователю выполнять поиск определенных c записей опроса на дату "dd-MM-гггг".
Я пробовал следующее, хотя возвращаемое представление View (surveyys.ToPagedList (pagerNumber, pageSize) )) выдает следующую ошибку при поиске даты:
System.NotSupportedException: «LINQ to Entities не распознает метод метода System.String ToString (System.String)», и это метод не может быть преобразован в выражение хранилища. '
Мой контроллер индексов:
// GET: SecondarySchoolSurvey
public ActionResult Index(string sortOrder, string currentFilter, string searchString, int? page)
{
ViewBag.CurrentSort = sortOrder;
ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "name_desc" : "";
//paging
if (searchString != null)
{
page = 1;
}
else
{
searchString = currentFilter;
}
ViewBag.CurrentFilter = searchString;
var surveys = from s in db.SecondarySchoolSurveys
select s;
if (!String.IsNullOrEmpty(searchString))
{
surveys = db.SecondarySchoolSurveys.Where(s => s.OfficialSchoolName.Contains(searchString) || s.RollNumber.Contains(searchString) || s.CampDate.Value.ToString("dd/MM/yyyy").Contains(searchString));
}
switch (sortOrder)
{
case "name_desc":
surveys = surveys.OrderByDescending(s => s.OfficialSchoolName);
break;
default:
surveys = surveys.OrderBy(s => s.OfficialSchoolName);
break;
}
int pageSize = 10;
int pageNumber = (page ?? 1);
return View(surveys.ToPagedList(pageNumber, pageSize));
}
Возможно, я мог бы использовать класс SqlFunctions, то есть SqlFunctions.StringConvert, но как мне тогда преобразовать DateTime в правильный формат (dd-MM-гггг)?
Я также пытался преобразовать строку поиска в DateTime, хотя получал исключение Sys.FormatException: «Строка не была распознана как допустимый DateTime».
DateTime dt = DateTime.Parse("dd-MM-yyyy", CultureInfo.InvariantCulture);
if (!String.IsNullOrEmpty(searchString))
{
surveys = db.SecondarySchoolSurveys.Where(s => s.OfficialSchoolName.Contains(searchString) || s.RollNumber.Contains(searchString) || s.CampDate == dt);
}