Entwickler-Ecke
Datenbanken (inkl. ADO.NET) - Zusammengesetzte Objekte nach Join
Määx - Fr 26.07.13 09:21
Titel: Zusammengesetzte Objekte nach Join
Hallo zusammen,
ich nutze das Entityframework und habe mir hier nach einem join ein neues Objekt erzeugt, dass mir die Ergebnisse der beiden Tabellen zurückliefert. Nun möchte ich aber abhängig davon, ob mir ein entsprechender Parameter übergeben wurde über eine zwewite Tabelle filtern oder nicht. Hierzu habe ich folgenden Code ausprobiert:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| public bool getPersonen(out myObject, int firmaID = 0){ IList<???> result; if( firmaID > 0 ) result = executeSQL( dbContext => from person in dbContext.List_Personen join firma in dbContext.List_Firmen_Person_Zuordnung on person.ID equals firma.PersonID where firma.firmaID == firmaID select new {person, firma} , "getPersonen firmaID"); else result = executeSQL( dbContext => from person in dbContext.List_Personen select new {person, NULL} , "getPersonen"); ... |
die zugehörige executeSQL sieht so aus:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| private IList<TableType> executeSQL<TableType>(Func<DBEntities, IQueryable<TableType>> sqlQuery, string errorMsg) { try { using( DBEntitiesdbContext = new DBEntities() ){ var result = sqlQuery(dbContext); return result.ToList(); } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine("Error SQL-Entity " + errorMsg + ": " + ex.Message); return null; } } |
Dabei habe ich aber das Problem, dass ich zum einen nicht weiß wie ich der IList<> den neuen Typ {List_Personen, List_Firmen_Person_Zuordnung} zuordnen kann und zum anderen funktioniert das newperson, NULL) nicht.
Wie kann ich das Ganze jetzt am geschicktesten anstellen?
Vielen Dank für eure Hilfe
Määx
Ralf Jansen - Fr 26.07.13 10:18
Anonyme Typen sind denkbar ungeeignet dafür über Methodengrenzen hinweg oder als generischen Parameter zu benutzen. So wie du das programmiert hast sehe ich aber keinen Grund einen anonymen Typen zu verwenden. Erstell dir einen konkreten Typen für {Person, Firma }.
Bei einem anonymen Typ muss man aus der Variablen für eine Property einen Namen und den Typ deduzieren können beides ist wenn du nur Null hinschreibst nicht möglich.
Du müßtest dann sowas basteln wie
C#-Quelltext
1: 2: 3: 4: 5:
| select new { person, firma = (string)null } |
Aber das du hier irgendwas reinpacken willst was nicht vorhanden ist zeigt das das kein wirklicher anonymer Typ ist denn du hast ja eine klare Vorstellung wie die Oberfläche der Klasse aussehen soll egal ob alle Daten da sind oder nicht. Also erstell dir eine konkrete Klasse.
Määx - Fr 26.07.13 15:53
ok, danke für die Info! Habe jetzt deinen Tipp befolgt und es klappt wunderbar!
Vielen Dank und viele Grüße
Määx
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!