如何搜索数据表中的特定值

本文关键字:数据表 何搜索 搜索 | 更新日期: 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中过滤的结果进行排序,这样就有了经过过滤和排序的集合。