2013-11-21 3 views
0

Я пытаюсь выполнить запрос Linq в использовании EntityFramework и получить ошибкуLINQ к Entities не распознает метод EntityFunctions.DiffMonths

System.NotSupportedException: LINQ to Entities does not recognize the method 'System.Nullable`1[System.Int32] DiffMonths(System.Nullable`1[System.DateTime], System.Nullable`1[System.DateTime])' method, and this method cannot be translated into a store expression. 

Кодекса

public bool FreeConversionExceeded(string ip) 
    { 
     var count = _statisticRepository.GetAll().Count(p => p.Ip == ip && EntityFunctions.DiffMonths(DateTime.UtcNow, p.DateStamp) == 0); 
     return count > 200; 
    } 


public IQueryable<Statistic> GetAll() 
    { 
     return _context.Statistic; 
    } 

Я просто не понимаю, почему EntityFunctions.DiffMonths не работает. Из файла справки «This function is translated to a corresponding function in the database.», так что он должен работать?

+0

Невозможно воспроизвести это, оно работает с столбцами 'DateTime' и' DateTime? '. –

+0

Я также не понимаю, почему он не работает. Он отлично работал в моем предыдущем проекте, и я не могу найти причину этого! – Tomas

ответ

0

У меня есть точная проблема. Решение было опубликовано здесь LINQ + EntityFunctions in asp.net mvc.

Проблема в том, что вы можете ссылаться на EntityFunctions от System.Data.Objects. Если вы используете EntityFramework, попробуйте ссылаться на System.Data.Entity.Core.Objects.

using System.Data.Entity.Core.Objects; 

Btw, EntityFunctions устарел. Попробуйте вместо этого использовать DbFunctions.

using System.Data.Entity; 
... 
... 
... 
public bool FreeConversionExceeded(string ip) 
{ 
    var count = _statisticRepository.GetAll().Count(p => p.Ip == ip && DbFunctions.DiffMonths(DateTime.UtcNow, p.DateStamp) == 0); 
    return count > 200; 
} 

Я знаю, что этот ответ на несколько лет опоздал. Но я надеюсь, что этот пост может помочь кому-то столкнуться с подобной проблемой.

Cheers

Смежные вопросы