2016-04-20 16 views
1

私は私がp.IDC#辞書は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"; 

BY ORDERを削除する必要があり、このクエリを持っていると私は私がデータベースから現在の要素と最後の要素を比較する必要が句あれば削除する必要があり、このコードを持っています。

 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; 
     } 
    } 

私はOrder Byを削除してから、このデータをデータベースから取得するためにDictionaryを使用する必要がありますが、私はDictionaryを初めて使っています。誰かが私にそれを作る方法を助けることができますか?ありがとう!

答えて

0

あなただけにあなたのリターンを修正した後、キーは製品IDで辞書< int型、製品>を返すために必要がある場合:

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