Usando esse código no Entity Framework , recebo o seguinte erro. Eu preciso obter todas as linhas para uma data específica, DateTimeStart
é do tipo DataType neste formato2013-01-30 12:00:00.000
Código:
var eventsCustom = eventCustomRepository.FindAllEventsCustomByUniqueStudentReference(userDevice.UniqueStudentReference)
.Where(x => x.DateTimeStart.Date == currentDateTime.Date);
Erro:
base {System.SystemException} = {"O tipo de membro especificado 'Data' não é suportado no LINQ to Entities. Somente inicializadores, membros da entidade e propriedades de navegação da entidade são suportadas."}
Alguma idéia de como consertar isso?
Respostas:
DateTime.Date
não pode ser convertido para SQL. Use o método EntityFunctions.TruncateTime para obter a parte da data.ATUALIZAÇÃO: Como o @shankbond mencionado nos comentários, o Entity Framework 6
EntityFunctions
é obsoleto e você deve usar aDbFunctions
classe que é fornecida com o Entity Framework.fonte
Agora você deve usar
DbFunctions.TruncateTime
fonte
Eu gostaria de adicionar uma solução que me ajudou a resolver esse problema na estrutura da entidade:
Espero que ajude.
fonte
EntityFunctions
é obsoleto. Considere usar em seuDbFunctions
lugar.fonte
Sempre use EntityFunctions.TruncateTime () para x.DateTimeStart e currentDate. tal como :
fonte
Basta usar propriedades simples.
Se datas futuras não forem possíveis no seu aplicativo, > = x.DateTimeStart> = currentDateTime.Date será suficiente.
se você tiver comparações de datas mais complexas, verifique as funções canônicas e se você possui funções EF6 + DB
Mais geralmente - Para pessoas que procuram problemas Os métodos Linq suportados no EF podem explicar problemas semelhantes com instruções linq que funcionam nas listas de base de memória, mas não no EF.
fonte
Simplificado:
fonte
Use o código abaixo para usar o EF6:
fonte
Outra solução poderia ser:
fonte