Сравните даты List of String с датами DataTable и обновите DataTable C# - PullRequest
0 голосов
/ 14 апреля 2020

Я работаю над проектом отчета, и у меня есть DataTable:

enter image description here

Даты поступают из базы данных (PIVOTS).

У меня есть код, который дает мне только даты выходных:

List<string> getWeekOffDates = ds.Tables[0].AsEnumerable().Select(x => x.Field<DateTime>("WeekOff").ToString("yyyy-MM-dd")).ToList();

Я хочу сравнить это с тем, совпадают ли getWeekOffDates и даты в моих таблицах данных ( из всех дат месяца). Если да, тогда присвойте им строку «WO», что означает WeekOff

Например:

getWeekOffDates будет иметь список дат, и 2020-01-04, 2020-01-05 - это два из них. Теперь я хочу проверить эти даты в моей таблице данных, если она есть, то я бы хотел присвоить строку «WO» этим датам во всех строках, чтобы упомянуть, что у нее выходной.

Я пробовал этот код, но не похоже, что datatable обновляется.

public DataTable GetHolidays(DataSet ds, List<string> dates, DataTable dt)
{
    for (int i = 0; i <= dates.Count - 1; i++)
    {
        // checks if dates from WeekOffDays Column is present
        bool weekOff = ds.Tables[0].AsEnumerable().Any(x => dates.Contains(x.Field<DateTime>("WeekOffDays").ToString("yyyy-MM-dd")));

        // get the weekoff dates
        List<string> getWeekOffDates = ds.Tables[0].AsEnumerable().Select(x => x.Field<DateTime>("WeekOff").ToString("yyyy-MM-dd")).ToArray();

        if (weekOff)
        {
            // string wo = dates[i].ToString();

            string offs = getWeekOffDates[i].ToString();

            dt.Columns.Cast<DataColumn>().Where(r => r.ColumnName == offs).FirstOrDefault().DefaultValue="WO";

        }

    }
    dt.AcceptChanges();
    return dt;
}

Затем я вызываю эту функцию по нажатию кнопки:

protected void btnGetLeaveData_Click(object sender, EventArgs e){

    DataTable report= DataAccess.GetDataInDataTable(ConstantFieldsModel.PRIMARYCONNECTION, "usp_GetAnalystLeaveReport", CommandType.StoredProcedure, param);

    List<string> columnNames = report.Columns.Cast<DataColumn>().Skip(16).Select(cols => cols.ColumnName).ToList();

    GetHolidays(GetData(), columnNames,report);

}

Назначенное DefaultValue должно обновиться DataTable, но это не так. Чего мне не хватает?

...