2010-01-31 20 views
9

perché sto ottenendo questo errore:Errore, metodo non supportato da LINQ to Entities

Il metodo 'unico' non è supportata da LINQ to Entities. Considera invece l'utilizzo del metodo "First".

  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(); 
      // 
      // 
      } 

codice compila sicuro, ma solo se si rompe chiamata viene effettuata alla rispettiva sezione. Sono nuovo di LINQ, quindi non so quali metodi sono per LINQtoSQL o LINQtoEntities. Questo significa più errori! Non possiamo ricordare tutti i metodi in questo modo.

La mia domanda è, se ci sono limitazioni ai metodi applicabili a determinati tipi/scenari, perché compaiono in Intellisense?

MODIFICA: Qualche soluzione/tecnica utile per avere un'idea se uno è supportato?

risposta

6

Microsoft ha un completo list of supported and unsupported methods in Linq alle entità. Ecco dove andare per scoprire queste informazioni.

Si noterà che i metodi e SingleOrDefault sono in effetti elencati come "non supportati" nella sezione sui metodi di paging.

Come ha sottolineato Jared, il compilatore non sa in fase di compilazione quale provider si sta utilizzando, quindi non ha modo di imporre la sicurezza in fase di compilazione dei metodi di estensione che il provider può o meno implementare. Dovrai invece fare affidamento sulla documentazione.

+1

Corretto (+1) per EF 1. Si noti, tuttavia, che entrambi i metodi sono supportati in EF 4. –

6

Nel caso di LINQtoSQL/Entities, le query sono tutte suddivise in alberi di espressione che vengono quindi passati alle API del provider. I provider non possono fornire informazioni sulla durata della compilazione degli alberi che fanno o non supportano perché non c'è alcuna differenza sintattica. L'unica scelta è che forniscano dati di runtime.

Ad esempio, una volta in forma di albero di espressioni, sia il singolo che il primo appaiono come un'istanza MethodCallExpression.

+0

Qualche idea su come conoscere o semplicemente "praticare rende l'uomo perfetto"? –

+1

@Asad, molti provider hanno un elenco delle chiamate che supportano nella loro documentazione ma salvo che si tratta di tentativi ed errori :( – JaredPar

Problemi correlati