如何搜索数据表中的特定值
本文关键字:数据表 何搜索 搜索 | 更新日期: 2023-09-27 18:12:04
伙计们,我有一个datatable
在一个ASP webforms应用程序中,我正试图实现一种排序。基本上我有两个名为Agent_Name
&Agent_Code
在我的数据表中。
例如,datatable
的值如下:
+------------+------------+
| Agent_Code | Agent_Name |
+------------+------------+
| 1 | A |
| 2 | B |
| 3 | C |
| 4 | D |
| 5 | E |
+------------+------------+
现在我有另一个Agent_Code
数组,其中我有2,3,5
,现在我想将这个数组与datatable
进行比较,并且只保留datatable
中具有Agent_Code
= 2,3,5
的记录,并丢弃其余的。所以最终的datatable
看起来像:
+------------+------------+
| Agent_Code | Agent_Name |
+------------+------------+
| 2 | B |
| 3 | C |
| 5 | E |
+------------+------------+
我该怎么做呢?如果你能给我指点指点,我会很感激的。
注意:请建议其他的linq,我使用的是webforms
可以使用嵌套的for循环:
for (int y = OriginalDataTable.Rows.Count - 1; y >= 0; y--)
{
int count = 0;
for (int i = 0; i <= AgentCodeArray.Length - 1; i++)
{
if (OriginalDataTable.Rows[y]["Agent_Code"].ToString() != AgentCodeArray[i].ToString())
{
count++;
if (count == AgentCodeArray.Length)
OriginalDataTable.Rows[y].Delete();
}
}
}
这做的是遍历数据表中的每条记录,并检查"Agent_Code"是否包含在新数组中的任何地方。如果是这样,随它去吧。如果没有,请删除。
这里的键是在删除时向后遍历数据表。如果不这样做,索引将被重新排序,您将看到一个错误。
try this:
//creating some test datatable and agent list
DataTable table = new DataTable();
table.Columns.Add(new DataColumn("Agent_Code"));
table.Columns.Add(new DataColumn("Agent_Name"));
DataRow row1 = table.NewRow();
DataRow row2 = table.NewRow();
DataRow row3 = table.NewRow();
DataRow row4 = table.NewRow();
DataRow row5 = table.NewRow();
row1["Agent_Code"] = 1;
row2["Agent_Code"] = 2;
row3["Agent_Code"] = 3;
row4["Agent_Code"] = 4;
row5["Agent_Code"] = 5;
row1["Agent_Name"] = "A";
row2["Agent_Name"] = "B";
row3["Agent_Name"] = "C";
row4["Agent_Name"] = "D";
row5["Agent_Name"] = "E";
table.Rows.Add(row1);
table.Rows.Add(row2);
table.Rows.Add(row3);
table.Rows.Add(row4);
table.Rows.Add(row5);
string[] Agent_Code = new string[] { "1", "3" };
//finished test data
//actual logic here
StringBuilder filterBuilder = new StringBuilder();
for (int i = 0; i < Agent_Code.Length; i++)
{
if (i != 0) filterBuilder.Append(" OR ");
filterBuilder.Append("Agent_Code = '");
filterBuilder.Append(Agent_Code[i]);
filterBuilder.Append("'");
}
DataView view = new DataView(table, filterBuilder.ToString(), "Agent_Code", DataViewRowState.CurrentRows);
DataTable newTable = view.ToTable();
下面的代码将帮助您
string[] single = new string[2] { "2", "3" };
var arr = dt.Rows.Cast<DataRow>().Where(r => single.Contains(r.Field<string>
("Agent_Code"))).CopyToDataTable();
在这个例子中,dt是你的数据源,它是从gridview中获得的。
除了使用Pragnesh提供的LINQ之外,您还可以考虑创建一个DataView。
使用您拥有的数组数据,使用RowFilter属性遍历包含DataTable中原始集合的DataView,以删除与数组中不匹配的DataTable条目。
对DataView中过滤的结果进行排序,这样就有了经过过滤和排序的集合。