Domanda

Ho pensato che le query compilate avrebbero eseguito la stessa traduzione delle query di DataContext. Eppure ricevo un errore di runtime quando provo a utilizzare una query con una chiamata al metodo .Contains. Dove ho sbagliato?

//private member which holds a compiled query.
Func<DataAccess.DataClasses1DataContext, List<int>, List<DataAccess.TestRecord>>
  compiledFiftyRecordQuery = System.Data.Linq.CompiledQuery.Compile
  <DataAccess.DataClasses1DataContext, List<int>, List<DataAccess.TestRecord>>
  ((dc, ids) => dc.TestRecords.Where(tr => ids.Contains(tr.ID)).ToList());

//this method calls the compiled query.
public void FiftyRecordCompiledQueryByID()
{
  List<int> IDs = GetRandomInts(50);

  //System.NotSupportedException
  //{"Parameters cannot be sequences."}

  List<DataAccess.TestRecord> results = compiledFiftyRecordQuery
    (myContext, IDs);         
}
È stato utile?

Soluzione

Questo articolo ha la tua risposta:

  

Le query con i parametri dell'elenco non possono essere   precompilato perché la traduzione di   la query dipende dal numero   di elementi nell'elenco.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top