【问题标题】:Select 2 or more columns on DataTable using LINQ使用 LINQ 在 DataTable 上选择 2 个或更多列
【发布时间】:2019-10-24 00:33:00
【问题描述】:

我有一个 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 列或更多列?

【问题讨论】:

  • 为什么不选择整行?这样,您就可以访问所需的所有列。

标签: c# linq datatable


【解决方案1】:

为什么不选择整行(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;
}

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多