Консольное приложение C # для печати данных за текущий месяц - PullRequest
0 голосов
/ 14 марта 2019

У меня есть дата, в которой месяц является последним столбцом. Мне нужно напечатать все строки, где месяц = ​​CurrentMonth. Например, этот месяц будет мартом, следующий месяц - апрелем и т. Д.

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

И я хочу напечатать на консоль ... т.е. 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");
}

Ответы [ 3 ]

2 голосов
/ 14 марта 2019

Вы можете использовать метод Select в 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 голос
/ 14 марта 2019

Вам нужен простой запрос на выборку для ваших данных:

    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");
1 голос
/ 14 марта 2019

Нечто подобное может быть:

foreach (DataRow r in dtData.Rows)
{
    if (r["SS"].ToString() == DateTime.Now.ToString("MMMM"))
    {
        Console.WriteLine(r["CN"].ToString() + r["SS"].ToString());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...