0

列が異なる2つのDataTableがありますが、1つの列は同じです。

dt2に存在しないdt1からの行を含む新しいDataTableを取得したい。

LINQを使用してそれを行うにはどうすればよいですか?

これが私の現在のコードですが、同じ列を持つDatatablesでのみ機能します。

private void Delete_HPM_Deleted_Points(int YellowCard_Request_ID)
{
    DataTable dt_hpm_points_DB = DataAccessLayer.Get_YellowCard_Request_HPM_Points(YellowCard_Request_ID);
    //dt_hpm_points_DB.Columns.Remove("HPM_Tool_ID");
    //dt_hpm_points_DB.Columns.Remove("HPM_Point_Message");
    //dt_hpm_points_DB.Columns.Remove("HPM_Point_isDisabled");
    //dt_hpm_points_DB.Columns.Remove("HPM_Point_Comments");

    DataTable dt_hpm_points_Local = UserSession.Get_User_YC_HPM_Added_Points_DATATABLE();
    //dt_hpm_points_Local.Columns.Remove("HPM_Tool_ID");
    //dt_hpm_points_Local.Columns.Remove("HPM_Point_Message");

    //var rowsInFirstNotInSecond = dt_hpm_points_DB.Rows.Where(r1 => !dt_hpm_points_Local.Rows.Any(r2 => r1.ID == r2.ID));

    DataTable dt_points_to_remove = dt_hpm_points_DB.AsEnumerable().Except(dt_hpm_points_Local.AsEnumerable(), DataRowComparer.Default).CopyToDataTable();

    foreach (DataRow dr in dt_points_to_remove.Rows)
    {
        DataAccessLayer.Delete_YellowCard_Request_HPM_Point(YellowCard_Request_ID, dr["HPM_Point_ID"].ToString());
    }
}
4

1 に答える 1

1

Linq-To-DataSet「左外部結合」で使用できます。

var justInDT1 = from r1 in dt1.AsEnumerable()
                join r2 in dt2.AsEnumerable()
                on r1.Field<int>("PK_ID") equals r2.Field<int>("FK_ID") into GJ
                from subRow in GJ.DefaultIfEmpty()
                where subRow == null
                select r1;

方法:左外部結合を実行する(C#プログラミングガイド)

于 2013-01-08T11:42:41.957 に答える