IQueryable-Liste

Ich bin mit System.Linq -.Dynamische, mir zu erlauben, dynamisch eine Liste der Felder aus einer Abfrage wie diese:

finalQuery = query.Select(string.Format("new({0})", string.Join(",", selectors)));

Wo selectors ist nur ein List<string> mit alle Felder die ich möchte. Dies funktioniert gut, aber diese version von der extension-Methode Select gibt ein IQueryable. Nicht dies ist nicht IQueryable<T>. Wenn ich eine IQueryable<T> ich kann einfach nicht ein .ToList() konvertieren es in eine Liste, und erzwingen Sie die Abfrage, um tatsächlich auf der Datenbank ausgeführt, aber das mit dem nicht-generischen IQueryable, dass die Methode nicht existiert.

Dies ist, weil ToList ist geerbt von IEnumerable<T> die IQueryable<T> erbt und IQueryable offensichtlich nicht.

Also, was ist der effizienteste Weg, um eine IQueryable führen Sie die Abfrage aus und geben mir wieder eine Liste? Ich kann dies tun:

List<object> rtn = new List<object>();
foreach (var o in finalQuery)
{
    rtn.Add(o);
}

Aber es scheint, wie Ihre sollte ein einfacher Weg.

Edit: In Reaktion auf Vorschläge, die ich beide ausprobiert:

finalQuery.Cast<object>().ToList();

und:

finalQuery.Cast<dynamic>().ToList();

Welche beide geben NotSupportedExceptions mit der Meldung:

Unable to cast the type 'DynamicClass1' to type 'System.Object'. LINQ to Entities 
only supports casting EDM primitive or enumeration types.
  • mögliche Duplikate von Wo ist die ToList () - Methode? (IQueryable)
  • haben Sie versucht, die Besetzung? msdn.microsoft.com/en-us/library/vstudio/...
  • Und was beabsichtigen Sie, Stimmen Sie zu?
  • Guter Punkt, ha vergaß seine dynamische
  • Ich habe versucht, casting, um object und es nicht gefallen, dass überhaupt. NotSupportedException, "unable to cast type 'DynamicClass1' zum Typ 'System.Objekt'"
  • Es ist klar (vielen Dank für die bringen Sie es auf), aber beantwortet nicht meine Frage. Reed ' s Antwort ist zu schließen, durch die ArrayList er postet nicht wirklich funktioniert. IQueryable ist nicht ICollection.

InformationsquelleAutor Matt Burland | 2014-08-22
Schreibe einen Kommentar