2

特定の ID を持つ名前を選択するために Datatable に LINQ クエリを実行したいのですが、文字列ではなく名前の長さを返します。サンプル コードを次に示します。

    private void btnShow(object sender, EventArgs e)
    {
        DataTable CL = new DataTable();
        DataRow rt;
        CL.Columns.Add(new System.Data.DataColumn("ID", typeof(string)));
        CL.Columns.Add(new System.Data.DataColumn("Name", typeof(string)));           

        for (int i = 0; i< dataGridView1.Rows.Count; i++)
        {

            rt = CL.NewRow();
            rt[0] = dataGridView1.Rows[i].Cells[0].Value.ToString();
            rt[1] = dataGridView1.Rows[i].Cells[1].Value.ToString();
            CL.Rows.Add(rt);
        }

        var results = from myRow in CL.AsEnumerable()
                  where myRow.Field<string>("ID") == "1"
                  select myRow.Field<string>("Name").ToString();

       dataGridView2.DataSource = results.ToList();

     }       

事前に感謝

4

2 に答える 2

0
    private void btnShow(object sender, EventArgs e)
{
    DataTable CL = new DataTable();
    DataRow rt;
    DataTable dt = new DataTable();
    DataRow row;
    CL.Columns.Add(new System.Data.DataColumn("ID", typeof(string)));
    CL.Columns.Add(new System.Data.DataColumn("Name", typeof(string)));           

    for (int i = 0; i< dataGridView1.Rows.Count; i++)
    {

        rt = CL.NewRow();
        rt[0] = dataGridView1.Rows[i].Cells[0].Value.ToString();
        rt[1] = dataGridView1.Rows[i].Cells[1].Value.ToString();
        CL.Rows.Add(rt);
    }

    IEnumerable<DataRow> results = from myRow in CL.AsEnumerable()
                                   where myRow.Field<string>("ID") == "1"
                                   select myRow;

            foreach (var re in results)
            {
                row = dt.NewRow();
                dt.Rows.Add(st.Field<string>("Name"));
            }
   dataGridView2.DataSource = dt;

 }    
于 2013-03-27T14:41:49.017 に答える
0

Valueあなたが疑っていない値を返しているのではないかと思います。

まず、試してみてください:

for (int i = 0; i< dataGridView1.Rows.Count; i++)
{
  rt = CL.NewRow();
  string value1 = dataGridView1.Rows[i].Cells[0].Value;
  string value2 = dataGridView1.Rows[i].Cells[1].Value.ToString();
  //Breakpoint here, check the values of value1 and value2
  CL.Rows.Add(rt);
}

また、クエリの別のバリエーションを試してみます。

string[] names = dt.Rows.Cast<DataRow>().Where(row => row["Id"] == 1).Select(row => row["Name"].ToString()).ToArray();

次に、この時点で名前を確認します。回答の最初のセクションの結果をコメントして、値が何であるかを確認してください。

于 2013-03-27T11:53:39.140 に答える