伙计我在ASP webforms应用程序中有一个datatable
,我正在尝试实现一种排序。基本上我有两个名为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。
答案 0 :(得分:2)
您可以使用嵌套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”是否包含在新数组中的任何位置。如果是这样,那就试试吧。如果没有,请将其删除。
此处的关键是在删除时通过数据表向后移动。如果不这样做,索引将被重新排序,您将看到错误。
答案 1 :(得分:1)
试试这个:
//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();
答案 2 :(得分:0)
以下代码可以帮助您
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.datasource获取的数据源,single是您的Agent_Code的数组。
答案 3 :(得分:0)
除了使用Pragnesh提供的LINQ之外,您还可以考虑创建一个DataView。
使用您拥有的数组数据,使用RowFilter属性循环包含DataTable中原始集的DataView,以删除与数组中的那些条目不匹配的DataTable条目。
对DataView中的过滤结果进行排序,您就拥有了已过滤和排序的集合。