Simplify if else condition using timespan in c#

  • A+
Category:Languages

I have to create a real time report and for that I have to write conditions for each and every hour of a given day. In the below code the condition checks for the current day of week and then check for the current time and based on that a report has to be generated.

Below would be the code:

protected void sample()     {         TimeSpan zerothHour = new TimeSpan(00, 0, 0);         TimeSpan firstHour = new TimeSpan(01, 0, 0);         TimeSpan secondHour = new TimeSpan(02, 0, 0);         TimeSpan thirdHour = new TimeSpan(03, 0, 0);         TimeSpan fourthHour = new TimeSpan(04, 0, 0);         TimeSpan fifthHour = new TimeSpan(05, 0, 0);         TimeSpan sixthHour = new TimeSpan(06, 0, 0);          // and so on until the twentyfourth hour         if (DateTime.Today.DayOfWeek == DayOfWeek.Monday)         {             if (DateTime.Now.TimeOfDay >= sixthHour && DateTime.Now.TimeOfDay <= seventhHour)             {                 //MySql query here                 string MyConString = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;                 MySqlConnection connection = new MySqlConnection(MyConString);                 string agentlogin = "SELECT agentlogin FROM agentdetails WHERE location = 'PNQ10-Pune' AND shift IN('6:00-15-00', '22:00-7:00') AND Mon = 'W'";                 MySqlCommand cmd = new MySqlCommand(agentlogin, connection);                 connection.Open();                 MySqlDataReader rdr = cmd.ExecuteReader();                 while (rdr.Read())                 {                    //lblagentlogin.Text += rdr["agentlogin"] + Environment.NewLine;                     sqlList.Add(Convert.ToString(rdr["agentlogin"]));                 }             }             else if(DateTime.Now.TimeOfDay >= seventhHour && DateTime.Now.TimeOfDay <= eigthHour)             {              }             else if (DateTime.Now.TimeOfDay >= eigthHour && DateTime.Now.TimeOfDay <= ninthHour)             {              }             else if (DateTime.Now.TimeOfDay >= ninthHour && DateTime.Now.TimeOfDay <= tenthHour)             {              }             else if (DateTime.Now.TimeOfDay >= tenthHour && DateTime.Now.TimeOfDay <= eleventhHour)             {              }             // and so on for the entire cycle of time         }     } 

The above code is only for Monday and I have to do the same for the other six days of week too and when I add the queries inside each conditions it would be like hundreds of lines. So I there a better way to get this done without having to write hundreds of lines of codes? Please let me know. Thanks in advance.

 


Does this work for you?

var sqls = new [] {     "select x from y",     "select w from q",     // etc - 24 options };  var sql = sqls[DateTime.Now.Hour]; 

Or even:

var sqls = new Action[] {     () => { /* sql for midnight */ },     () => { /* sql for 1 am */ },     // etc     () => { /* sql for 11 pm */ }, };  var sql = sqls[DateTime.Now.Hour];  sql.Invoke(); 

If you want DayOfWeek and Hour then you could use this:

var sqls = new string[][] {     new [] { "select x from y", "select w from q", },     new [] { "select x from y", "select w from q", },     new [] { "select x from y", "select w from q", },     new [] { "select x from y", "select w from q", },     new [] { "select x from y", "select w from q", },     new [] { "select x from y", "select w from q", },     new [] { "select x from y", "select w from q", }, };  var sql = sqls[(int)DateTime.Now.DayOfWeek][DateTime.Now.Hour]; 

Comment

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: