1Future Ответов: 2

Как я могу искать дату только из поля datetime в entity framwork?


Всем Привет,
Я делаю запрос из таблицы, содержащей дату и время, то есть "2016-08-16 09:26:30.413"

когда я делаю запрос с помощью таблицы с использованием c#, как показано ниже, я не получаю никаких результатов .. например;

DateTime date = "2016-08-16"
DateTime date2 = "2016-08-16 09:26:30.413"
var getdate = context.Table.Where(x => x.Datefield == date).FirstOrDefault(); //This returns no results
var getdate = context.Table.Where(x => x.Datefield == date)2.FirstOrDefault(); // thsi returns the results.


Как бы я идти о поиске на дату только с помощью образования проводился?

Что я уже пробовал:

Я только что искал в интернете, как я могу добиться этого, но все равно не повезло!

2 Ответов

Рейтинг:
2

Richard Deeming

Существует несколько вариантов, которые вы можете использовать для поиска записей без загрузка всей таблицы в память.

Например, этот метод работает и будет использовать преимущества индекса в столбце даты:

DateTime date = new DateTime(2016, 8, 6);
DateTime nextDay = date.AddDays(1);

var entity = context.Table.FirstOrDefault(x => x.Datefield >= date && x.Datefield < nextDay);

Этот не сможет использовать индекс, но все равно будет работать:
DateTime date = new DateTime(2016, 8, 6);
var entity = context.Table.FirstOrDefault(x => DbFunctions.TruncateTime(x.Datefield) == date);


Karthik_Mahalingam

5

Рейтинг:
14

Karthik_Mahalingam

пробовать

string inputdate = "2016-08-16";
var val = context.Table.ToList().Where(k => k.DateField.ToString("yyyy-MM-dd") == inputdate).FirstOrDefault();


пожалуйста, обратитесь к решению Ричарда для альтернативного и эффективного способа достижения этой цели


1Future

Привет , спасибо, что уделили мне время.. теперь я получаю следующую ошибку LINQ to Entities не распознает систему метода.String ToString(System.String)' метод, и этот метод не может быть переведен в выражение хранилища.

Karthik_Mahalingam

Дата-это строка или типа datetime ?

1Future

Его Тип DateTime

Karthik_Mahalingam

 string inputdate = "2016-08-16";
context.Table.ToList().Where(k => k.DateField.ToString("yyyy-MM-dd") == inputdate).FirstOrDefault();

1Future

Привет , я упускаю что-то отличное от первого решения, которое вы предоставили? К сожалению, я все еще получаю ту же ошибку

Karthik_Mahalingam

.Список()

1Future

Спасибо .. теперь он работает

Karthik_Mahalingam

добро пожаловать

Richard Deeming

Извините, но это похоже на ... ужасный идея!

Вы извлекаете весь набор данных в память, а затем преобразуете дату в строку, чтобы сравнить ее.

Есть гораздо лучшие подходы, которые вы можете использовать. :)

Karthik_Mahalingam

Да, я знаю об этом. Я думал с точной точки зрения вопроса.. мое решение также не будет работать для сравнения дат, ОП был обеспокоен точной датой, поэтому опубликовал это..
Я уже упоминал, чтобы сослаться на ваше решение, которое помогло бы ему или кому-либо в будущем, кто посещает эту тему.
Спасибо, что указал..