| 

.NET C# Java Javascript Exception

5
Hallo,

ich habe das Problem, dass ich ein IQueryable<T> in ein IObjectSet<T> überführen möchte und zur Laufzeit kein sinnvolles Ergebnis erhalte. Vorausschickend ist noch zu sagen, dass es sich um ein spezialisiertes Objekt handelt ('ClassSpecial' erbt von 'ClassBasis'). Hier ein Beispiel:
IQueryable<ClassSpecial> _b;
IQueryable<ClassSpecial> B
{
// '_context' erlaubt den Zugriff auf die Basisobjekte 'ClassBasis' in der Datenbasis
// ist ein EF 4.1 Context
get { return _b ?? (_b = _context.OfType<ClassSpecial> ()); }
}

// später im code
public IObjectSet<T> CreateObjectSet<T> () where T : class
{
Type type = T.GetType ();
...
if (type == typeof(B)
return B as IObjectSet<T>; // <- liefert null
...
}

// der Aufruf erfolgt in einer anderen Klasse, z.B. einem Repository, mit
IObjectSet<ClassSpecial> ClassSpecialContainer = CreateObjectSet<ClassSpecial> ();


Kann mir da jemand helfen? Wahrscheinlich stehe ich nur auf dem Schlauch und sehe die Lösung einfach nicht!

Danke!

mph
News:
21.10.2011
mph 227 1 6
1 Antwort
2
Der Code wird nur funktionieren, wenn _b auf ein Objekt von einem Typ verweist, der IObjectSet<ClassSpecial> implementiert.
_context.OfType<ClassSpecial>() liefert, soweit ich sehe, eine ObjectQuery<ClassSpecial>-Instanz, und ObjectQuery<ClassSpecial> implementiert IObjectSet<ClassSpecial> nicht.
21.10.2011
Matthias Hlawatsch 13,2k 4 9
Danke für die schnelle Reaktion. _context.OfType<ClassSpecial> liefert ein System.Linq.IQueryable<T> zurück und das wiederum wird von IObjectSet<T> implementiert. Also sollte es doch funktionieren oder?
mph 21.10.2011
2
Nein - IObjectSet<T> implementiert gar nichts, denn es ist ein Interface. Es erweitert vielmehr IQueryable<T> in dem Sinne, dass es an die implementierenden Klassen zusätzliche Anforderungen (zu implementierende Methoden) stellt. D.h. jeder, der IObjectSet<T> implementiert, implementiert dadurch automatisch auch IQueryable<T>, aber nicht umgekehrt.
Matthias Hlawatsch 21.10.2011
Danke! Habe ich missinterpretiert.
mph 24.10.2011

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH