如何使用LINQ过滤DataTable

时间:2012-10-27 17:55:39

标签: c# linq datatable

我有DataTable,它带来了数据库中的数据。

  • Name
  • Address
  • CountryID

我想通过LINQ过滤我身边的数据:我有一个复选框列表,其中包含ID为1,2,3,4的国家/地区。我想只获取已检查国家/地区的结果。例如LINQ为CountryID的1,2,4。我想将它绑定到网格视图。

我使用以下代码:

foreach (ListItem cBox in chkGodownlst.Items)
{ 
    if (cBox.Selected)
    {
        var a = dt.AsEnumerable()
                  .Where(r => r.Field<int>("CountryID") == Convert.ToInt32(cBox.Value));
    }
}

2 个答案:

答案 0 :(得分:1)

尝试这样的事情:

// Get all checked id's.
var ids = chkGodownlst.Items.OfType<ListItem>()
    .Where(cBox => cBox.Selected)
    .Select(cBox => cBox.Value)
    .ToList();

// Now get all the rows that has a CountryID in the selected id's list.
var a = dt.AsEnumerable().Where(r => 
    ids.Any(id => id == r.Field<int>("CountryID"))
);

// Create a new table.
DataTable newTable = a.CopyToDataTable();

// Now set the new table as DataSource to the GridView.

答案 1 :(得分:0)

你应该尝试这个:

var collection = new List<dynamic>();
foreach (ListItem cBox in chkGodownlst.Items)
{
   if(cBox.Selected)
   {
       collection.AddRange(dt.AsEnumerable().Where(r => r.Field<int>("CountryID") == Convert.ToInt32(cBox.Value)));
   }
}

GridView1.DataSource = collection;
GridView1.DataBind();

希望这会有所帮助!!