2010-11-25 3 views
0

Ich habe eine asp.net MVC-Ansicht, die Telerik Grid verwendet.Wie kann ich IQueryable in IQueryable <T> umwandeln, wenn ich das T im Voraus nicht kenne?

Html.Telerik.Grid(Model.Items) 

Model.Items ist IQueryable, aber das Gitter erfordert mich zu werfen:

Zum Beispiel:

Html.Telerik.Grid((IQueryable<Product>)Model.Items) 

Das Problem ist: Ich weiß nicht, welche Art in Modell ist .Items (es kann IQueryable<Product>, IQueryable<Book> und viele andere sein).

Was ich auch haben, ist Model.ItemsType, die folgenden Werte haben kann: typeof(IQueryable<Product>), typeof(IQueryable<Book>) ...

Wie kann ich die IQueryable zu IQueryable<T> werfen, wenn ich nicht weiß, welche Art von T im Voraus ?

Antwort

0

generische Typen müssen bei Kompilierung-, nicht bestimmt bei Laufzeit bekannt sein.

Was ist der Typ von Model.Items? Wenn es von IEnumerable<T> abgeleitet ist, dann vorausgesetzt, Sie haben einen Verweis auf System.Linq dann sollten Sie in der Lage sein, die AsQueryable() Erweiterungsmethode aufzurufen.

0

Sie müssen Reflection verwenden, um die Grid-Methode aufzurufen, wenn Sie das T nicht rechtzeitig kennen, da es zur Kompilierungszeit nicht möglich ist. Wenn Model.Items tatsächlich ein IQueryable ist, müssen Sie es nicht umwandeln. Übergeben Sie sie einfach als Parameter während des reflektionsbasierten Aufrufs (der sowieso alle Parameter als Typobjekt akzeptiert).

+0

Danke, Brad (Ich lese Ihren Blog und ich sah Ihre Videos: P & P Symposium und Advanced Mvc). Ich habe eine Lösung gefunden und werde sie später hier veröffentlichen (ich bin jetzt beschäftigt). –