Ошибка, метод не поддерживается LINQ to Entities - PullRequest
9 голосов
/ 31 января 2010

Почему я получаю эту ошибку:

Метод 'Single' не поддерживается LINQ to Entities. Попробуйте вместо этого использовать метод «Первый».

           public ActionResult Details(int id)
Line 27:   {              
             var result = (from d in _db.MovieSet
Line 29:     where d.Id == id
Line 30:     select d).Single();
            //
            //
           } 

Код компилируется безопасно, но прерывается, только если сделан вызов в соответствующий раздел. Я новичок в LINQ, поэтому не знаю, какие методы для LINQtoSQL или LINQtoEntities. Это означает больше ошибок! Мы не можем запомнить все методы таким образом.

Мой вопрос: если существуют ограничения для методов, применимых к определенным типам / сценариям, почему они появляются в Intellisense?

РЕДАКТИРОВАТЬ: Любой обходной путь / техника полезно иметь представление, если один поддерживается?

Ответы [ 3 ]

6 голосов
/ 31 января 2010

Microsoft имеет полный список поддерживаемых и неподдерживаемых методов в Linq to Entities. Вот куда обратиться, чтобы узнать эту информацию.

Вы заметите, что методы Single и SingleOrDefault фактически перечислены как "не поддерживаемые" в разделе о методах подкачки.

Как указал Джаред, компилятор не знает во время компиляции, какой провайдер вы используете, поэтому у него нет способа обеспечить безопасность во время компиляции методов расширения, которые поставщик может реализовывать или не реализовывать. Вместо этого вам придется полагаться на документацию.

6 голосов
/ 31 января 2010

В случае LINQtoSQL / Entities все запросы разбиваются на деревья выражений, которые затем передаются в API провайдера. Поставщики не могут предоставить информацию времени компиляции о деревьях, которые они поддерживают или не поддерживают, потому что нет синтаксической разницы. Единственный выбор для них - предоставить данные времени выполнения.

Например, один раз в форме дерева выражений и Single, и First отображаются как экземпляр MethodCallExpression.

0 голосов
/ 31 января 2010

К сожалению, это еще один показатель относительной незрелости r для EF и Несоответствия относительного импеданса объекта .

Документация ваш друг, если вы выберете этот маршрут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...