C# 如何基于.net中的另一个数据表删除一个数据表行?
我有一个名为C# 如何基于.net中的另一个数据表删除一个数据表行?,c#,asp.net,.net,datatable,C#,Asp.net,.net,Datatable,我有一个名为dtFirst的数据表,如下所示 Fieldname Newvalue antenastructure 12 slno 2 servicelevel powersupply 另一个数据表为dtMaster Mastertabe Masterfield infoid zvalue qvalue M_seq antenastr
dtFirst
的数据表,如下所示
Fieldname Newvalue
antenastructure 12
slno 2
servicelevel
powersupply
另一个数据表为dtMaster
Mastertabe Masterfield infoid zvalue qvalue
M_seq antenastructure 123
M_seq slno 1
M_seq servicelevel 133
M_seq powersupply 154
M_seq azimheight 124
我想要的是,如果
dtFirst
的Fieldname
不包含Newvalue
的话,我想从dtMaster
中删除行。在这里,我想删除包含servicelevel
和powersupply
的行。这两个是大数据表,我在其中发布了一小部分内容,这是伪的在我手机上键入的代码:
var rowsWithoutVals = dtFirst.Rows.Select("newValues = ''");
for(int i = dtMaster.Rows.Count - 1; i > -1;i--) {
foreach (var emptyItem in rowsWithoutVals) {
if (emptyItem[0] == dtMaster[i][1]) {
dtMaster.Rows.RemoveAt[i];
break;
}
}
}
看看这是否有效
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
DataTable dtFirst = new DataTable();
dtFirst.Columns.Add("Fieldname", typeof(string));
dtFirst.Columns.Add("Newvalue", typeof(int));
dtFirst.Columns["Newvalue"].AllowDBNull = true;
dtFirst.Rows.Add(new object[] {"antenastructure", 12});
dtFirst.Rows.Add(new object[] {"slno", 2});
dtFirst.Rows.Add(new object[] {"servicelevel"});
dtFirst.Rows.Add(new object[] {"powersupply"});
string[] dtFirstValidRows = dtFirst.AsEnumerable().Where(x => x.Field<int?>("Newvalue") != null).Select(x => x.Field<string>("Fieldname")).ToArray();
DataTable dtMaster = new DataTable();
dtMaster.Columns.Add("Mastertabe", typeof(string));
dtMaster.Columns.Add("Masterfield", typeof(string));
dtMaster.Columns.Add("infoid", typeof(int));
dtMaster.Columns["infoid"].AllowDBNull = true;
dtMaster.Columns.Add("zvalue", typeof(int));
dtMaster.Columns["zvalue"].AllowDBNull = true;
dtMaster.Columns.Add("qvalue", typeof(int));
dtMaster.Columns["qvalue"].AllowDBNull = true;
dtMaster.Rows.Add(new object[] {"M_seq", "antenastructure", 123});
dtMaster.Rows.Add(new object[] {"M_seq", "slno", 1});
dtMaster.Rows.Add(new object[] {"M_seq", "servicelevel", 133});
dtMaster.Rows.Add(new object[] {"M_seq", "powersupply", 154});
dtMaster.Rows.Add(new object[] {"M_seq", "azimheight", 124});
dtMaster = dtMaster.AsEnumerable().Where(x => dtFirstValidRows.Contains(x.Field<string>("Masterfield"))).CopyToDataTable();
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用系统数据;
命名空间控制台应用程序1
{
班级计划
{
静态void Main(字符串[]参数)
{
DataTable dtFirst=新DataTable();
dtFirst.Columns.Add(“Fieldname”,typeof(string));
dtFirst.Columns.Add(“Newvalue”,typeof(int));
dtFirst.Columns[“Newvalue”]。AllowDBNull=true;
Add(新对象[]{“天线结构”,12});
添加(新对象[]{“slno”,2});
添加(新对象[]{“servicelevel”});
添加(新对象[]{“powersupply”});
字符串[]dtFirstValidRows=dtFirst.AsEnumerable()。其中(x=>x.Field(“Newvalue”)!=null)。选择(x=>x.Field(“Fieldname”)).ToArray();
DataTable dtMaster=新DataTable();
Add(“Mastertabe”,typeof(string));
添加(“主字段”,typeof(字符串));
Add(“infoid”,typeof(int));
dtMaster.Columns[“infoid”].AllowDBNull=true;
添加(“zvalue”,typeof(int));
dtMaster.Columns[“zvalue”].AllowDBNull=true;
添加(“qvalue”,typeof(int));
dtMaster.Columns[“qvalue”]。AllowDBNull=true;
添加(新对象[]{“M_seq”,“antenastructure”,123});
添加(新对象[]{“M_seq”,“slno”,1});
添加(新对象[]{“M_seq”,“servicelevel”,133});
添加(新对象[]{“M_seq”,“powersupply”,154});
添加(新对象[]{“M_seq”,“azimheight”,124});
dtMaster=dtMaster.AsEnumerable()。其中(x=>dtFirstValidRows.Contains(x.Field(“Masterfield”)).CopyToDataTable();
}
}
}
C'mon,这很简单-你应该能够自己编写代码-向我们展示你迄今为止的努力?只需执行一个行。选择on dtFirst以获取不带新值的项目,然后在dtMaster上迭代,删除dtFirst中不带值的行。我使用了链接中提到的逻辑,但没有一个成功