使用LINQ在DataTable上选择2个或更多列

时间:2016-03-28 07:34:17

标签: c# linq datatable

我有一个DataTable,我想在DataTable上选择与文本框中的输入匹配的多个列。以下代码仅选择1列。

  var result = from data in mDataTable.AsEnumerable ()
                 where data.Field<string>("Code") == txtCode.Text
                 select data.Field<string> ("Description");

    foreach (var res in result) {

        txtxDescription.Text = res.ToString ();
    }

如何使用LINQ在DataTable上选择2个或更多列?

2 个答案:

答案 0 :(得分:3)

为什么不选择完整行(DataRow对象),然后从中获取所有必要的值?

var rows = mDataTable.AsEnumerable()
                     .Where(data => data.Field<string>("Code") == txtCode.Text);

foreach(DataRow r in rows)
{
     txtxDescription.Text = r.Field<string>("Description");
}

另一种选择是将数据投射到匿名对象:

var result = from data in mDataTable.AsEnumerable ()
             where data.Field<string>("Code") == txtCode.Text
             select new 
                    { 
                      Description = data.Field<string> ("Description"), 
                      Code = data.Field<string> ("Code") 
                    };

foreach (var res in result) 
{
    // last value always replace `txtxDescription.Text` ?? 
    txtxDescription.Text = res.Description;
    txtxCode.Text = res.Code;
}

答案 1 :(得分:0)

 public void GridviewBinding()
    {
        
        DataSet ds = new DataSet();
        string constr = ConfigurationManager.ConnectionStrings["SQLMSDB"].ConnectionString;
        string sql = "select * from tbl_users";
        using (SqlConnection conn = new SqlConnection(constr))
        {
            using (SqlCommand cmd = new SqlCommand(sql))
            {
                cmd.Connection = conn;
                using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
                {
                    sda.Fill(ds);
                    gridviewcontrol.DataSource = ds;
                    gridviewcontrol.DataBind();
                    ViewState["GridViewBindingData"] = ds.Tables[0];
                }
            }
        }
    }
    
    
     protected void btn_searching_Click(object sender, EventArgs e)
    {
        if (!String.IsNullOrEmpty(txt_search.Text.Trim().ToString()) || !String.IsNullOrWhiteSpace(txt_search.Text.Trim().ToString()))
        {
            DataTable dt = (DataTable)ViewState["GridViewBindingData"];
            var dataRow = dt.AsEnumerable().Where(x => x.Field<dynamic>("UserName") == txt_search.Text);
            DataTable dt2 = dataRow.CopyToDataTable<DataRow>();
            gridviewcontrol.DataSource = dt2;
            gridviewcontrol.DataBind();
        }
        else
        {
            GridviewBinding();
        }
        
    }

相关问题