通过连接两个数据表使用LINQ删除

时间:2016-12-15 01:53:54

标签: c# linq datatable dataset

我有两个数据表 DurationByCurrency (在数据集内)和 Fund ,如下所示 enter image description here

我想通过执行连接删除 Duration By Currency Datatable中的行,其FundCode在 Fund Dt中的值为2。

var result =  from table1  in raptorDS.Tables[RaptorTable.DurationByCurrency].AsEnumerable()
                               join table2  in fundDT.AsEnumerable()
                               on   table1.Field<string>("FundCode") equals table2.Field<string>("FundCode") into ps
                               from row in ps.DefaultIfEmpty()
                               {
                                    //delete query
                               }

请帮我解决这个问题,因为我是LINQ的新手。

1 个答案:

答案 0 :(得分:1)

var result = from row1  in raptorDS.Tables[RaptorTable.DurationByCurrency].AsEnumerable()
                               join row2  in fundDT.AsEnumerable()
                               on   row1.Field<string>("FundCode") equals  row2.Field<string>("FundCode") 
                               where row1.Field<string>("value") 
                                    equals "2" select row1;

result.ToList().ForEach(row => row.Delete());

linqpad的示例测试代码:

void Main()
{
    //sample data for test 
    DataSet ds = new DataSet();
    ds.Tables.Add(GetTable1());
    ds.Tables.Add(GetTable2());

    var result  = ( from rec1 in ds.Tables[0].AsEnumerable()
    join rec2  in ds.Tables[1].AsEnumerable()
     on   rec1.Field<string>("FC") equals rec2.Field<string>("FC")
     where rec2.Field<int>("Value") == 2  select rec1);

     result.ToList().ForEach(row => row.Delete());
     //now you have only "ABCD" and "AZY" in table 1
     //ds.Tables[0].Dump(); linqpad display result
}

DataTable GetTable1()
{
    DataTable table = new DataTable();
    table.Columns.Add("FC", typeof(string));
    table.Rows.Add("ABCD");
    table.Rows.Add("XYZ");
    table.Rows.Add("AZY");
    return table;
}

 DataTable GetTable2()
{
    DataTable table = new DataTable();
    table.Columns.Add("FC", typeof(string));
        table.Columns.Add("Value", typeof(int));
    table.Rows.Add("ABCD", 1);
    table.Rows.Add("XYZ", 2);
    table.Rows.Add("AZY",3);
    return table;
}