Laden...

Dynamische LINQ Source

Erstellt von SaberRider vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.508 Views
SaberRider Themenstarter:in
112 Beiträge seit 2006
vor 11 Jahren
Dynamische LINQ Source

verwendetes Datenbanksystem: MSSQL 2005 Standard V 9.00.3050.00

Hallo zusammen,

nach langer Zeit hab komm ich mal wieder zum Coden und bin direkt in ein, für mich, verzwicktes Problem gerannt.

Ich möchte per Linq (.net 4.0) eine dynamische Abfrage auf unterschiedliche Tabellen machen und dann entsprechendes Ergebnis vom Typ der Tabelle bekommen. Die Where-Klausel ist (hier nicht aufgezeigt) bei allen Tabellen identisch.

Auf diese Art in etwa


var resultset = from b in sutekhDB.<<TableName>>
select b;

wobei <<TableName>> der Name der Tabelle und das Ergebnis eben von Typ <<TabelName>>
sein soll.

Nachfolgendes funktioniert natürlich leider nicht, da b seinen Typ nicht kennt.


Assembly execAsm = Assembly.GetExecutingAssembly();

Type myType = (from type in execAsm.GetTypes()
where type.Name.ToLower().Equals(TableName.ToLower())
select type).FirstOrDefault();

var v = from b in myType
select b;

DataContext.GetTable hab ich auch schon versucht, bin aber zu keinem funktionierenden Ergebnis gekommen.

Ich hoffe ich hab mein Vorhaben einigermaßen beschrieben. Leider bin ich mit Linq noch lange nicht so weit ich das gerne hätte.

Dankbar wäre ich um Hinweise, Schlagworte oder sonstiges, welche mich bei einer Lösungsfindung weiterbingen könnten.
Was habe ich übersehen?
Oder befinde ich mich komplett auf dem Holzweg und mein Vorhaben kann mit Linq nicht realisiert werden?

Google, etc. kann ich grad nicht mehr sehen 😉

Auf jeden Fall schon einmal vielen lieben Dank für die Hilfe.

Beste Grüße,
SaberRider

    • Lieber Fürst in der Hölle als Sklave im Himmel - 8)
1.552 Beiträge seit 2010
vor 11 Jahren

Hallo SaberRider,

du könntest alle deine benötigten Klassen von einem Interface erben lassen, welche die Name Eigenschaft besitzt und dann folgendes machen:


public Interface IMyInterface
{
    string Name { get;}
}

public static Expression<Func<T,bool>> CustomFilter<T>(string name) where T : IMyInterface
{
    return i => i.Name.Equals(name);
}

Dann kannst du den Aufruf wie folgt erreichen.


var result = context.TableNameWelcheIMyInterfaceImplementiert.Where(CustomFilter("hallo"));

Benutze EF, deswegen kann es in Linq vielleicht anders sein.

Gruß,
Michael

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

SaberRider Themenstarter:in
112 Beiträge seit 2006
vor 11 Jahren

Hola Michael,

danke für deine fixe Antwort. Bin leider erst jetzt zu gekommen, mir sie anzuschauen, da es mich bei bestem Wetter krankheitstechnisch erwischt hat.

Zwei Fragen hätte ich zu deiner Antwort:

Zu Anfang eine vllt. blöde... Aber können Klassen von Interfaces erben? Soweit ich weiß nicht. Oder meinst du eine abstrakte Klasse? Bzw. du meinst die Klasse ein Interface implementieren zu lassen, oder? Bitte bitte nicht falsch verstehen, ich mag nur ein eventuelles Missverständnis vermeiden.

Wenn ich alle meine notwendigen Klasse modifizieren, dann ists doch nicht mehr komplett dynamisch. Genau so einen manuellen Eingriff will ich ja vermeiden.

Es muss nicht zwingend Linq sein. Bin für alles andere offen 😃

Ich versuch mal, ob ich ein besseres Beispiel erstellen kann.

Grüße und Danke,
Gøran

    • Lieber Fürst in der Hölle als Sklave im Himmel - 8)
D
91 Beiträge seit 2005
vor 11 Jahren

Du hast Recht, wenn du sagst, dass eine Klasse nicht von einem Interface erben kann. Sie kann dies nur implementieren. Da die Schreibweise im Quellcode jedoch identisch ist, sagen manche dies einfach so.

16.842 Beiträge seit 2008
vor 11 Jahren

Solang die verschiedenen Typen nicht von einer gemeinsamen Basis (oder Interface) stammen, ist dies mit Linq nicht möglich.
xxMUROxx's Lösung ist die sinnvollste.

SaberRider Themenstarter:in
112 Beiträge seit 2006
vor 11 Jahren

OK, danke für die Antworten 😃

Dann überleg ich mir mal, ob ich das Interface so einbinde, bzw. ob das in meinem Fall dann noch so passt wie es gedacht war.

😮

    • Lieber Fürst in der Hölle als Sklave im Himmel - 8)