Ich muss viele zu viele Beziehung mit Wörterbuch und ADO zu glätten. Hier ist mein Code und ich muss Unternehmen auf Client nicht wiederholbar machen. Es ist nicht erlaubt, Reihenfolge von in Abfrage zu verwenden. Ich brauche Hilfe, danke! Verwenden von Abfrage:Wörterbuch viele zu viele
string Query= "SELECT c.ID, c.FirstName, c.LastName,
c.EGN, c.Birthday,
com.ID as CompanyID,
com.Name,
com.Location
FROM Clients c
LEFT JOIN ClientCompanies cc
ON c.ID=cc.ClientID
LEFT JOIN Company com ON cc.CompanyID=com.ID";
static List<Client> GetClients(SqlCommand command)
{
List<Client> listClients = new List<Client>();
Dictionary<int, Client> dicClients = new Dictionary<int, Client>();
Dictionary<int, Company> dicCompanies = new Dictionary<int, Company>();
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
Client newClient = null;
Company newCompany = null;
int clientId = (int)reader["ID"];
dicClients.TryGetValue(clientId, out newClient);
if (newClient == null)
{
newClient = new Client();
newClient.ID = (int?)reader["ID"];
newClient.FirstName = (!reader.IsDBNull(reader.GetOrdinal("FirstName")) ? (string)reader["FirstName"] : null);
newClient.LastName = (!reader.IsDBNull(reader.GetOrdinal("LastName")) ? (string)reader["LastName"] : null);
newClient.EGN = (!reader.IsDBNull(reader.GetOrdinal("EGN")) ? (string)reader["EGN"] : null);
newClient.Birthday = (!reader.IsDBNull(reader.GetOrdinal("Birthday")) ? (string)reader["Birthday"] : null);
}
int companyId = (!reader.IsDBNull(reader.GetOrdinal("CompanyID")) ? (int)reader["CompanyID"] : 0);
//Some check with dictionary
if (newCompany == null)
{
newCompany = new Company();
newCompany.ID = (!reader.IsDBNull(reader.GetOrdinal("CompanyID")) ? (int?)reader["CompanyID"] : null);
newCompany.Name = (!reader.IsDBNull(reader.GetOrdinal("Name")) ? (string)reader["Name"] : null);
newCompany.Location = (!reader.IsDBNull(reader.GetOrdinal("Name")) ? (string)reader["Name"] : null);
newClient.ClientTo.Add(newCompany);
}
dicClients[clientId] = newClient;
}
listClients = dicClients.Values.ToList();
return listClients;
}
Wofür brauchen Sie Hilfe? Funktioniert es nicht wie erwartet, oder erhalten Sie einen Fehler oder was? Ist das Problem mit dem SQL oder dem Code oder beiden? Und warum kann ORDER BY nicht verwendet werden? – stuartd
Ich habe Aufgabe, es ohne Reihenfolge durch in Abfrage zu machen. Ich meine, ich muss diese Lösung so schnell wie möglich für CPU machen. –