【问题标题】:from datatable to array، no loop从数据表到数组,没有循环
【发布时间】:2011-04-24 01:46:04
【问题描述】:

以下用于传输到列表框的代码是:

            DataTable dt = new DataTable();

        DataColumn dc = new DataColumn("BestSite", typeof(string));

        dt.Columns.Add(dc);

        for (int i = 1; i <= 10; i++)
        {
            DataRow dr = dt.NewRow();
            dr[0] = i.ToString() + " = stackoverflow";
            dt.Rows.Add(dr);
        }//EndFor

        var Query = from mycolumn in dt.AsEnumerable()
                    where mycolumn.Field<string>("BestSite") != string.Empty
                    select mycolumn;


        listBox1.DataSource = Query.AsDataView();

        listBox1.DisplayMember = "BestSite";

转入数组应该是什么? 无循环

  string[] myvalue = new string[Query.AsDataView().Count];

【问题讨论】:

    标签: c# winforms linq arrays datatable


    【解决方案1】:

    终于实现了

    正确答案:

         private string ConvertToString(DataRow dr)
        {
            return Convert.ToString(dr[0]);
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
    
            DataTable dt = new DataTable();
    
            DataColumn dc = new DataColumn("BestSite", typeof(string));
    
            dt.Columns.Add(dc);
    
            for (int i = 1; i <= 10; i++)
            {
                DataRow dr = dt.NewRow();
                dr[0] = i.ToString() + " = stackoverflow";
                dt.Rows.Add(dr);
            }//EndFor
    
            //var Query = from mycolumn in dt.AsEnumerable()
            //            where mycolumn.Field<string>("BestSite") != string.Empty
            //            select mycolumn;
    
            DataRow[] myrow = new DataRow[dt.Rows.Count];
            dt.Rows.CopyTo(myrow, 0);
    
            string[] myString = Array.ConvertAll(myrow, new Converter<DataRow, string>(ConvertToString));
    
    
            foreach (string a in myString)
            {
                listBox1.Items.Add(a);
            }
    
        }
    

    【讨论】:

      【解决方案2】:

      如果我正确理解了您的问题...

      string[] myvalue = Query.Select(i => i.Field<string>("BestSite")).ToArray();
      

      【讨论】:

      • 你仍然可以用 LINQ 做,再次检查答案。
      【解决方案3】:

      本示例假设:
      => 数据表长度非零
      => 值是“可解析的”以加倍。

          coln = "PurchasePrice";
      
          double[] arr_val = Array.ConvertAll<DataRow, double>
              ( 
              dattbl.Select(),
              delegate (DataRow rw) { return 
              double.Parse(rw[coln].ToString()); }
              );
          
          // ... and for example 
          double total = arr_val.Sum();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-06-16
        • 2013-01-18
        • 1970-01-01
        • 1970-01-01
        • 2020-08-24
        • 2022-01-09
        • 2017-03-30
        相关资源
        最近更新 更多