Консольное приложение C # для печати данных за текущий месяц

#c# #datatable

#c# #datatable

Вопрос:

У меня есть datatable, в котором месяц указан в качестве последнего столбца. Мне нужно напечатать все строки, где месяц = currentMonth. Так, например, в этом месяце будет март, в следующем месяце будет апрель и т.д.

Используя приведенные ниже примеры данных — как мне напечатать CN и SS для всех строк, где SS = текущий месяц?

И я хочу распечатать на консоли … т. е. Console.PrintLine();

 static void Main(string[] args) 
{
  DataTable dtData = new DataTable();
  dtData.Columns.Add("CN", typeof(string));
  dtData.Columns.Add("AN", typeof(string));
  dtData.Columns.Add("SN", typeof(string));
  dtData.Columns.Add("CE", typeof(string));
  dtData.Columns.Add("TSD", typeof(DateTime));
  dtData.Columns.Add("TSC", typeof(DateTime));
  dtData.Columns.Add("T1S", typeof(DateTime));
  dtData.Columns.Add("T1C", typeof(DateTime));
  dtData.Columns.Add("T2S", typeof(DateTime));
  dtData.Columns.Add("T2C", typeof(DateTime));
  dtData.Columns.Add("SS", typeof(string));

  dtData.Rows.Add("1111", "TestSN", "email", DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, "March");
  dtData.Rows.Add("2222", "TestSN1", "email1", DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, "July");
  dtData.Rows.Add("3333", "TestSN2", "email2", DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, "January");
  dtData.Rows.Add("4444", "TestSN3", "email3", DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, "April");
  dtData.Rows.Add("5555", "TestSN4", "email4", DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, "October");
  dtData.Rows.Add("6666", "TestSN5", "email5", DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, "December");
  dtData.Rows.Add("7777", "TestSN6", "email6", DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, "March");
}
  

Комментарии:

1. Пожалуйста, будьте более конкретны. Что вы подразумеваете под «печатью данных»? Вы имеете в виду на физический принтер? Предпринимали ли вы какие-либо попытки распечатать эти данные самостоятельно? Если да, пожалуйста, добавьте это в вопрос.

2. @Amy — Консоль извинений. PrintLine();

3. Вы пробовали выполнять итерации по строкам datatable, сравнивая значение последнего столбца с текущим DateTime и выводя соответствующие?

Ответ №1:

Вы можете использовать метод выбора DataTable, чтобы выбрать только те строки, в которых столбец SS равен этому месяцу.

 var allRows = dt.Select($"SS='{DateTime.Now.ToString("MMMM", CultureInfo.InvariantCulture)}'");
            foreach(var r in allRows)
            {
                Console.WriteLine($"{r["CN"].ToString()}, {r["SS"].ToString()}");
            }
  

Вывод:

 1111, March
7777, March
  

Кроме того, ваш приведенный выше код не компилируется. Похоже, эту строку в вашем коде следует удалить:

 dtData.Columns.Add("CE", typeof(string));
  

Комментарии:

1. Что означает $ «SS =»?

2. $ — это новый способ произносить строку. Форматирование. Результатом является оператор выбора таблицы данных «Где SS = ‘March'»

Ответ №2:

Возможно, что-то вроде этого:

 foreach (DataRow r in dtData.Rows)
{
    if (r["SS"].ToString() == DateTime.Now.ToString("MMMM"))
    {
        Console.WriteLine(r["CN"].ToString()   r["SS"].ToString());
    }
}
  

Ответ №3:

что вам нужно, так это простой запрос select для ваших данных:

     string expression = $"SS = '{DateTime.Now.ToString("MMMM")}'";
    var filteredData = dtData.Select(expression);
    foreach(var item in filteredData)
    {
        Console.WriteLine($"CN: {item["CN"]}, SS: {item["SS"]}");
    }
  

кстати, в вашем примере есть еще одна проблема, из-за которой вы забыли, что ваши строковые столбцы равны 4, и вы вставляете 3 строки в свои строки:

     dtData.Rows.Add("1111", "TestSN",  "email",  "CE", DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, "March");
    dtData.Rows.Add("2222", "TestSN1", "email1", "CE", DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, "July");
    dtData.Rows.Add("3333", "TestSN2", "email2", "CE", DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, "January");
    dtData.Rows.Add("4444", "TestSN3", "email3", "CE", DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, "April");
    dtData.Rows.Add("5555", "TestSN4", "email4", "CE", DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, "October");
    dtData.Rows.Add("6666", "TestSN5", "email5", "CE", DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, "December");
    dtData.Rows.Add("7777", "TestSN6", "email6", "CE", DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, "March");