Autor Beitrag
Määx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 123



BeitragVerfasst: Fr 26.07.13 09:21 
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:
ausblenden 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 123



BeitragVerfasst: 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