7 Stimmen

Kompilierte Abfragen und "Parameter können keine Sequenzen sein"

Ich dachte, dass kompilierte Abfragen die gleiche Abfrageübersetzung wie DataContext durchführen würden. Dennoch erhalte ich einen Laufzeitfehler, wenn ich versuche, eine Abfrage mit einem .Contains-Methodenaufruf zu verwenden. Was habe ich falsch gemacht?

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

12voto

Dieser Artikel hat Ihre Antwort:

Abfragen mit Listenparametern können nicht vorkompiliert werden, da die Übersetzung der der Abfrage von der Anzahl der der Elemente in der Liste abhängt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X