C# 如何将数据集中的一行复制到另一个数据集中?
我在一个数据集中循环2次,试图找到ID与数组赋值匹配的行,如果匹配,我想将该行复制到另一个表中。例如:C# 如何将数据集中的一行复制到另一个数据集中?,c#,C#,我在一个数据集中循环2次,试图找到ID与数组赋值匹配的行,如果匹配,我想将该行复制到另一个表中。例如: DataSet dsWinners = new DataSet(); for(int i =0;i<=TotalWinners;i++) { for (int j = 1; j <= ds.Tables[0].Rows.Count; j++) { //this is my ds table 0 left = Convert.ToInt
DataSet dsWinners = new DataSet();
for(int i =0;i<=TotalWinners;i++)
{
for (int j = 1; j <= ds.Tables[0].Rows.Count; j++)
{
//this is my ds table 0
left = Convert.ToInt16(ds.Tables[0].Rows[i]["ID"]);
//this is my array
right = Convert.ToInt16(Winners[i, 0]);
if ( left == right )//if array value matechs with ds.table[0] ID
{
dsWinners.Tables[0].Rows[i] = ds.Tables[0].Rows[j];
}
}
}
DataSet=newdataset();
对于(int i=0;iDataSet=new DataSet();
DataTable=ds.Tables[0].Clone();
对于(int i=0;i如果我正确地阅读了您的问题,那么当满足特定条件时,您需要从一个数据集复制行,并将其传输到另一个数据集。假设两个数据集具有相同的结构,此示例就足够了
DataSet DSResult = new DataSet();
DSResult.Tables.Add();
DSResult.Tables[0].Columns.Add("ID", typeof(int));
DSResult.Tables[0].Columns.Add("Name", typeof(string));
DSResult.Tables[0].Rows.Add(1,"Jon");
DSResult.Tables[0].Rows.Add(2, "Kyle");
DSResult.Tables[0].Rows.Add(3, "Sam");
DSResult.Tables[0].Rows.Add(4, "Peter");
DSResult.Tables[0].Rows.Add(5, "Lily");
DataSet DSWinners = new DataSet();
DSWinners.Tables.Add();
DSWinners = DSResult.Clone();
int[] Id = new int[] { 1, 4, 5 }; //condition to match
foreach (int val in Id)
{
DataRow[] Samplerow =
DSResult.Tables[0].AsEnumerable()
.Select((row, index) => new { row, index })
.Where(item => item.row.Field<int>("ID") == val)
.Select(item => item.row)
.ToArray();
DSWinners.Tables[0].ImportRow(Samplerow[0]);
// If both tables are not same then
string YourVal=Samplerow[0]["ID"].ToString();
DSWinners.Tables[0].Rows.Add();
DSWinners.Tables[0].Rows[0]["YourColumnname"]=Yourval //Should have same Datataype
}
DataSet DSResult=新数据集();
DSResult.Tables.Add();
DSResult.Tables[0].Columns.Add(“ID”,typeof(int));
DSResult.Tables[0].Columns.Add(“Name”,typeof(string));
DSResult.Tables[0].Rows.Add(1,“Jon”);
DSResult.Tables[0].Rows.Add(2,“Kyle”);
DSResult.Tables[0].Rows.Add(3,“Sam”);
DSResult.Tables[0].Rows.Add(4,“Peter”);
DSResult.Tables[0].Rows.Add(5,“Lily”);
数据集DSWinners=新数据集();
DSWinners.Tables.Add();
DSWinners=DSResult.Clone();
int[]Id=newint[]{1,4,5};//要匹配的条件
foreach(Id中的int val)
{
DataRow[]采样器=
DSResult.Tables[0].AsEnumerable()
.Select((行,索引)=>new{row,index})
.Where(item=>item.row.Field(“ID”)==val)
.Select(项=>item.row)
.ToArray();
DSWinners.Tables[0].ImportRow(Samplerow[0]);
//如果两个表不相同,则
字符串YourVal=Samplerow[0][“ID”].ToString();
DSWinners.Tables[0]。Rows.Add();
DSWinners.Tables[0]。行[0][“YourColumnname”]=Yourval//应具有相同的数据类型
}
DataTable tempDt=newdatatable();
tempDt=ds.Tables[0].Clone();
表[0].Rows.OfType().ToList().ForEach(x=>
{
int rowIndex=ds.Tables[0].Rows.IndexOf(x);
如果(行索引
编辑:
Dictionary winnersList=newdictionary();
for(int i=0;ix.Key));
数据集dsWinners=新数据集();
dsWinners.Tables.Add(ds.Tables[0]。选择(“ID IN(““+idList+”))”)).CopyToDataTable();
dsWinners.Tables[0].Columns.Add(“prize_amt”,typeof(string));
dsWinners.Tables[0].Rows.OfType().ToList().ForEach(x=>
{
x[“奖金金额”]=winnersList[x[“ID”].ToString();
});
dsWinners.Tables[0].AcceptChanges();
希望这有帮助…你说得对。但有一个问题。两个数据集的结构不同,因为其中一个数据集填充了所有数据,而第二个数据集是新的数据集。我的数据列每次都不同…我无法添加它们manually@Ali这个怎么样?我得到“索引超出了数组的界限。”在if行!!!@Ali这个编辑过的怎么样?现在假设TotalWinners
是数组中的元素数,但我得到的结果是错误的。我只得到了一行!@Ali你能试试我编辑过的答案吗…我的数据列每次都不同…我无法手动添加它们,在解决了以下问题后,我得到了下面的error:此行已属于另一个表。请将最后一行更改为dsWinners.Tables.Add(dataTable);dataTable.Rows.Add(ds.Tables[0].Rows[j].ItemArray);//这将解决您的问题,[链接]()
DataSet ds = new DataSet();
DataTable dt = new DataTable("ExampleTable");
dt.Columns.Add(new DataColumn("Age",typeof(int)));
dt.Columns.Add(new DataColumn("Name", typeof(string)));
DataRow dr = dt.NewRow();
dr["Age"] = 30;
dr["Name"] = "Mike";
dt.Rows.Add(dr);
ds.Tables.Add(dt);
DataSet DSResult = new DataSet();
DSResult.Tables.Add();
DSResult.Tables[0].Columns.Add("ID", typeof(int));
DSResult.Tables[0].Columns.Add("Name", typeof(string));
DSResult.Tables[0].Rows.Add(1,"Jon");
DSResult.Tables[0].Rows.Add(2, "Kyle");
DSResult.Tables[0].Rows.Add(3, "Sam");
DSResult.Tables[0].Rows.Add(4, "Peter");
DSResult.Tables[0].Rows.Add(5, "Lily");
DataSet DSWinners = new DataSet();
DSWinners.Tables.Add();
DSWinners = DSResult.Clone();
int[] Id = new int[] { 1, 4, 5 }; //condition to match
foreach (int val in Id)
{
DataRow[] Samplerow =
DSResult.Tables[0].AsEnumerable()
.Select((row, index) => new { row, index })
.Where(item => item.row.Field<int>("ID") == val)
.Select(item => item.row)
.ToArray();
DSWinners.Tables[0].ImportRow(Samplerow[0]);
// If both tables are not same then
string YourVal=Samplerow[0]["ID"].ToString();
DSWinners.Tables[0].Rows.Add();
DSWinners.Tables[0].Rows[0]["YourColumnname"]=Yourval //Should have same Datataype
}
DataTable tempDt = new DataTable();
tempDt = ds.Tables[0].Clone();
ds.Tables[0].Rows.OfType<DataRow>().ToList().ForEach(x =>
{
int rowIndex = ds.Tables[0].Rows.IndexOf(x);
if (rowIndex < TotalWinners &&
Convert.ToInt16(x["ID"]) == Convert.ToInt16(Winners[rowIndex, 0]))
{
tempDt.ImportRow(x);
}
});
DataSet dsWinners = new DataSet();
dsWinners.Tables.Add(tempDt);
Dictionary<string, string> winnersList = new Dictionary<string, string>();
for (int i = 0; i < TotalWinners; i++)
{
winnersList.Add(Winners[i, 0], Winners[i, 1]);
}
string idList = string.Join("','", winnersList.Select(x => x.Key));
DataSet dsWinners = new DataSet();
dsWinners.Tables.Add(ds.Tables[0].Select("ID IN ('" + idList + "')").CopyToDataTable());
dsWinners.Tables[0].Columns.Add("prize_amt", typeof(string));
dsWinners.Tables[0].Rows.OfType<DataRow>().ToList().ForEach(x =>
{
x["prize_amt"] = winnersList[x["ID"].ToString()];
});
dsWinners.Tables[0].AcceptChanges();