Lassen Sie Benutzer eine Datenbank sein, die typische Benutzerdaten (Name, E-Mail ...) mit einer ID als Primärschlüssel enthält.Extrahieren Sie vom SQL-Server eine Liste der Benutzer mit der Liste aller gekauften Anwendungen (Zuordnungstabelle)
Lassen Sie Applications
eine Datenbank sein, die eine Liste von Anwendungen (Name, Entwickler ...) mit einer ID als Primärschlüssel speichert.
Lassen Sie UsersApps
die Zuordnungstabelle zwischen den beiden sein, die den Primärschlüssel verwenden. UsersApps speichert also Zeilen von ..., {102, user1_Id, appA_Id}, {103, userN_ID, appB_Id}, {104, user1_Id, appC_Id}, ...
Und so weiter.
Ich möchte eine Liste von Benutzern, Daten abzurufen {name, email, List<Application> boughtApps}
Ich kämpfe eine LINQ-Anfrage zu finden, das zu tun und ich versuche, es in zwei Schritten zu tun, einen großen Tisch bekommen und dann jeder Liste des Benutzers aufbauen von Anwendungen.
var q1 = from user in _dbContext.Users
join appUti in _dbContext.AppUsers on user.Id equals appUti.UsersId
join app in _dbContext.Applications on appUti.ApplicationId equals app.Id
orderby user.Id
select new UserDataWithApp { Id = user.Id, Name = user.Name, firstName= user.FirstName, Email = user.Email, App = app };
Dann q1.toList()
analysieren meine gewünschten Ergebnisse Liste zu erstellen.
var qRes = q1.ToList();
int i = 0;
int j = 0;
while (i<qRes.Count())
{
listUsersWithApps[j] = qRes[i];
while (qRes[i].Id == listUsersWithApps[j].Id) // llist is ordered !!
{
listUsersWithApps[j].Apps.Add(qRes[i].Apps[0]);
i++;
}
j++;
}
Gibt es keinen besseren Weg?
Leider komme ich nicht, wie Sie ging von der fliessenden api zu deinem one liner :(Jedenfalls kann ich nicht einfach nochmal die DB konfigurieren, ich habe einen automatischen Generator benutzt. – Poutrathor
Versuchen Sie einfach, das Beispiel im ersten Link zu verstehen. Konzentriere dich nicht auf die linq-Abfrage, es ist nicht so wichtig. Sie müssen Ihre Datenbankstruktur nicht ändern. Ich werde meinen Beitrag bearbeiten, um einige Details hinzuzufügen. –