比较c#中的数据表和字符串数组

时间:2014-02-03 14:11:34

标签: c# arrays linq datatable

我只想将名为“name”的数据表的第一个col与数组中的项进行比较。它们可以是数据表中具有相同名称的多行。在比较了数组中的所有项之后,它应该删除不是来自数据表的行。输出结果可以是数据表本身或列表数组(更喜欢这个)但是这应保留数据表中的所有列。可能想要使用linq查询。

代码:

DataTable dt = new DataTable("TestTable");
dt.Columns.Add(new DataColumn("email",System.Type.GetType("System.String")));
dt.Columns.Add(new DataColumn("type",System.Type.GetType("System.String")));
dt.Columns.Add(new DataColumn("card",System.Type.GetType("System.String")));

ArrayList al = new ArrayList();
al.Add("one@mail.com");
al.Add("two@mail.com");
al.Add("nine@mail.com");
al.Add("ten@mail.com");

DataRow r1 = dt.NewRow(); r1["email"] = "one@mail.com"; //addtype+card// dt.Rows.Add(r1);

DataRow r2 = dt.NewRow(); r2["email"] = "one@mail.com"; //addtype+card// dt.Rows.Add(r2); 

DataRow r3 = dt.NewRow(); r3["email"] = "two@mail.com"; //addtype+card// dt.Rows.Add(r3);

DataRow r4 = dt.NewRow(); r4["email"] = "four@mail.com"; //addtype+card// dt.Rows.Add(r4);

DataRow r5 = dt.NewRow(); r5["email"] = "five@mail.com"; //addtype+card// dt.Rows.Add(r5);

因此从上面的行r4和r5将从数据表中删除。

2 个答案:

答案 0 :(得分:1)

您可以使用代码执行以下操作。

  • 首先使用List<string>代替ArrayList (有关详细信息,请参阅this
  • 第二行向DataTable添加行,目前您正在创建新行 行但你没有添加它们。

稍后使用此查询,您可以创建一个新的DataTable,其中包含基于您的电子邮件列表的行。

DataTable dtNew = dt.AsEnumerable()
                   .Where(r => al.Contains(r.Field<string>("email")))
                   .CopyToDataTable();

所以你的完整代码可能是:

DataTable dt = new DataTable("TestTable");
dt.Columns.Add(new DataColumn("email", System.Type.GetType("System.String")));
dt.Columns.Add(new DataColumn("type", System.Type.GetType("System.String")));
dt.Columns.Add(new DataColumn("card", System.Type.GetType("System.String")));

List<string> al = new List<string>(); //Use List<string>
al.Add("one@mail.com");
al.Add("two@mail.com");
al.Add("nine@mail.com");
al.Add("ten@mail.com");

DataRow r1 = dt.NewRow(); r1["email"] = "one@mail.com"; //addtype+card// dt.Rows.Add(r1);
dt.Rows.Add(r1);
DataRow r2 = dt.NewRow(); r2["email"] = "one@mail.com"; //addtype+card// dt.Rows.Add(r2); //Add Row to DataTable
dt.Rows.Add(r2);
DataRow r3 = dt.NewRow(); r3["email"] = "two@mail.com"; //addtype+card// dt.Rows.Add(r3);
dt.Rows.Add(r3);
DataRow r4 = dt.NewRow(); r4["email"] = "four@mail.com"; //addtype+card// dt.Rows.Add(r4);
dt.Rows.Add(r4);
DataRow r5 = dt.NewRow(); r5["email"] = "five@mail.com"; //addtype+card// dt.Rows.Add(r5);
dt.Rows.Add(r5);

DataTable dtNew = dt.AsEnumerable()
                   .Where(r => al.Contains(r.Field<string>("email")))
                   .CopyToDataTable();

答案 1 :(得分:0)

尝试

var resultTable = dt.AsEnumberable().Where(r => al.Contains(r.Field<string>("email")).Select(r => r).CopyToDataTable();