C# 如何将数据集中的一行复制到另一个数据集中?

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

我在一个数据集中循环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.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;i
DataSet=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();