2016-04-20 12 views
1

Ich habe diese Abfrage i ORDER entfernen muß VON p.IDC# Wörterbuch HashSet

string query = "SELECT p.Price, p.ID, p.Name, c.Name as CategoryName, p.CategoryID, c.ID AS CategoryPK, c.ParentID," 
      + " o.ID as OrderID,o.ProductID,o.ClientCompanyID,o.Quentity" 
      + " FROM Products p LEFT JOIN Categories c ON p.CategoryID=c.ID LEFT JOIN Orders o ON o.ProductID=p.ID ORDER BY p.ID"; 

Und ich habe diesen Code i if-Klausel entfernen sollte, wo ich letztes Element mit aktuellem Elemente aus der Datenbank vergleichen bin.

 static List<Product> GetProducts(SqlCommand command) 
    { 
     using (SqlDataReader reader = command.ExecuteReader()) 
     { 

      List<Product> listProducts = new List<Product>(); 
      while (reader.Read()) 
      { 

       Product product = null; 
       int productId = (int)reader["ID"]; 

       if (listProducts.Count >= 1 && listProducts[listProducts.Count - 1].ID == productId) 
       { 
        product = listProducts[listProducts.Count - 1]; 
       } 

       if (product == null) 
       { 
        product = new Product(); 

        product.ID = productId; 

        product.Name = (!reader.IsDBNull(reader.GetOrdinal("Name")) ? (string)reader["Name"] : null); 
        product.Price = reader.GetDecimal(reader.GetOrdinal("Price")); 
        product.CategoryID = reader.GetInt32(reader.GetOrdinal("CategoryID")); 
        Category newCat = new Category(); 
        newCat.ID = reader.GetInt32(reader.GetOrdinal("CategoryPK")); 
        newCat.CategoryName = reader.GetString(reader.GetOrdinal("CategoryName")); 
        newCat.Parent = (!reader.IsDBNull(reader.GetOrdinal("ParentID")) ? reader.GetInt32(reader.GetOrdinal("ParentID")) : 0); 
        product.Category = newCat; 

       } 

       Order order = new Order(); 
       order.ID = (!reader.IsDBNull(reader.GetOrdinal("OrderID")) ? (int?)reader["OrderID"] : null); 
       order.ClientCompanyID = (!reader.IsDBNull(reader.GetOrdinal("ClientCompanyID")) ? (int?)reader["ClientCompanyID"] : null); 
       order.ProductID = (!reader.IsDBNull(reader.GetOrdinal("ProductID")) ? (int?)reader["ProductID"] : null); 
       order.Quentity = (!reader.IsDBNull(reader.GetOrdinal("Quentity")) ? (int?)reader["Quentity"] : null); 

       product.Orders.Add(order); 
       listProducts.Add(product); 
      } 
      reader.Close(); 
      listProducts = listProducts.Distinct().ToList(); 
      return listProducts; 
     } 
    } 

Ich habe Order By in Abfrage zu entfernen und dann in Methode verwenden Dictionary diese Daten aus der Datenbank zu erhalten, aber ich bin neu auf Wörterbuch. Kann mir jemand helfen wie ich es mache? Vielen Dank!

Antwort

0

Wenn brauchen Sie nur Wörterbuch < int zurück, Product> wo Schlüsselprodukt-ID, dann auf Ihre Rückkehr ändern:

return listProducts.GroupBy(x => x.ID). 
    ToDictionary(y => y.Key, z => z.ToList());