2016-12-27 6 views
1
public static Dictionary<string, object> LonView() 
     { 
      string sql = "SELECT Marks,Id FROM table4"; 
      using (SqlConnection Connection = new SqlConnection((@"DataSource"))) 
      { 
       using (SqlCommand myCommand = new SqlCommand(sql, Connection)) 
       { 
        Connection.Open(); 
        using (SqlDataReader myReader = myCommand.ExecuteReader()) 
        { 
         DataTable dt = new DataTable(); 
         dt.Load(myReader); 
         Connection.Close(); 
    Dictionary<string, object> lst = new Dictionary<string, object>(); 
         var tableEnumerable = dt.AsEnumerable(); 
         var tableArray = tableEnumerable.ToArray(); 
       foreach (var data in tableArray) 
         { 
         lst.Add(data["id"].ToString(),data["Marks"] as string); 
         } 

return lst; 
      } 
     } 
    } 
} 

データテーブルの列をディクショナリに変換し、配列{["A"、30]、["B"、32]、[C "、45]} form.Suggest私の仕事をするためのいくつかのアイデア。データテーブルの内容をディクショナリにロード

答えて

0

は、この例を見てみましょう:

 DataTable table = new DataTable(); 
     table.Columns.Add("Id", typeof(string)); 
     table.Columns.Add("Marks", typeof(int)); 
     table.Rows.Add(new object[] { "A", 50 }); 
     table.Rows.Add(new object[] { "B", 100 }); 
     table.Rows.Add(new object[] { "C", 200 }); 

     Dictionary<string, int> dict = new Dictionary<string, int>(); 
     foreach (DataRow row in table.Rows) 
     { 
      dict.Add(row[0].ToString(), Convert.ToInt32(row[1].ToString())); 
     } 

     var arr = dict.ToArray(); 

は、このヘルプあなたをしていますか?

例外が発生するため、クエリで重複したID値(辞書のキー)が返されないようにしてください。

+0

おかげで、実際に内容が辞書にロードされ、正確に1列を.But。 @ Nino – monica

0

あなたは、任意のDataTableを作成する必要があり、一時的なDictionaryません:あなたは、いくつかの目的

using (SqlConnection Connection = new SqlConnection((@"DataSource"))) { 
    using (SqlCommand myCommand = new SqlCommand(sql, Connection)) { 
    Connection.Open(); 

    using (SqlDataReader myReader = myCommand.ExecuteReader()) { 
     DataTable dt = new DataTable(); 
     dt.Load(myReader); 

     // You can obtain the string[][] array via Linq: 
     string[][] result = dt 
     .AsEnumerable() 
     .Select(record => new string[] { 
      Convert.ToString(record["id"]), 
      Convert.ToString(record["Marks"]), }) 
     .ToArray(); 

     ... 
    } 
    ... 
ため DataTableを保持したい場合は:シンプルなダイレクト whileループが

string sql = 
    @"SELECT Marks, 
      Id 
     FROM table4"; 

using (SqlConnection Connection = new SqlConnection((@"DataSource"))) { 
    using (SqlCommand myCommand = new SqlCommand(sql, Connection)) { 
    Connection.Open(); 

    // We don't know the final array's length; let's use a list as a buffer 
    List<string[]> buffer = new List<string[]>(); 

    using (SqlDataReader myReader = myCommand.ExecuteReader()) { 
     while (myReader.Read()) 
     buffer.Add(new string[] { 
      Convert.ToString(myReader["id"]), 
      Convert.ToString(myReader["Marks"]), 
     }); 
    } 

    return buffer.ToArray(); 
    }   
} 

編集を行います

+0

はい、あなたは正しいですが、何らかの目的のためにデータテーブルが必要です.Suggest他のアイデア@ Dmitry Bychenko – monica

+0

@monica:in t (DataTable dtを保持している)あなたのケースは* Linq *を介してギザギザの配列を得ることができます(私の編集を参照してください) –

0

この例を試してみてください

dt.AsEnumerable() 
     .ToDictionary<DataRow, string, object>(row => row.Field<string>(0), 
           row => row.Field<object>(1)); 

これはあなたを助けます。

0

非常に単純な要求:

 public static Dictionary<string, object> LonView() 
     { 
      string sql = "SELECT Marks,Id FROM table4"; 
      Dictionary<string, object> lst = null; 
      using (SqlConnection Connection = new SqlConnection((@"DataSource"))) 
      { 
       using (SqlDataAdapter adapter = new SqlDataAdapter(sql, Connection)) 
       { 
        DataTable dt = new DataTable(); 
        adapter.Fill(dt); 
        Connection.Close(); 
        lst = dt.AsEnumerable() 
         .GroupBy(x => x.Field<string>("Marks"), y => y.Field<object>("Id")) 
         .ToDictionary(x => x.Key, y => y.FirstOrDefault()); 
       } 
      } 
      return lst; 

     } 

データベース内の値は、DateTimeのであればあなたの応答のための

 public static Dictionary<string, DateTime> LonView() 
     { 
      string sql = "SELECT Marks,Id FROM table4"; 
      Dictionary<string, DateTime> lst = null; 
      using (SqlConnection Connection = new SqlConnection((@"DataSource"))) 
      { 
       using (SqlDataAdapter adapter = new SqlDataAdapter(sql, Connection)) 
       { 
        DataTable dt = new DataTable(); 
        adapter.Fill(dt); 
        Connection.Close(); 
        lst = dt.AsEnumerable() 
         .GroupBy(x => x.Field<string>("Marks"), y => y.Field<DateTime>("Id")) 
         .ToDictionary(x => x.Key, y => y.FirstOrDefault()); 
       } 
      } 
      return lst; 

     } 
+0

グループBy(x => x.Field ( "XX")、y => y.Field (「YY」))。 XXが日付時刻でYYが文字列の場合、この操作はどのように行うのですか? @ jdweng – monica

+0

山括弧<>内の型は、データベース内の列と同じでなければなりません。したがって、文字列をDateTimeに変換する場合、オブジェクトはy.Field ( "Id")、またはDateTime.Parse(y.Field ( "Id"))になります。 – jdweng

+0

私は理解できませんでした。あなたはコードフォームで記入していただけますか? – monica

関連する問題