2016-11-09 16 views
0

DataGridviewに、昨日から を開始する最後の3日間の日付が入力されています。日曜日の日付は含めないでください。以下のコードは大丈夫です 偉大だが、これは書くのと同じように限られた量のコードで改善できると思う。ただ一つの機能Yesterdays日付から始まり、日曜日を含まない最後の3日間の日付を生成

どうすれば改善できる?月曜日は-11/07/2016、火曜日-11/08/2016 TODAY-処理した場合に

  private void button1_Click(object sender, EventArgs e) 
      { 
       var rangeList = new List<MyDates>(); 

       //first date 
       var yesterday = DateTime.Today.AddDays(-1); 
       string dayoftheweek = yesterday.DayOfWeek.ToString(); 
       DateTime storefirstdate; 
       if (dayoftheweek == "Sunday") 
       { 
        var firstdate = DateTime.Today.AddDays(-2); 
        storefirstdate = firstdate; 
        rangeList.Add(new MyDates() {Dateseries = storefirstdate});    
       } 
       else 
       { 
        storefirstdate = yesterday; 
        rangeList.Add(new MyDates() {Dateseries = storefirstdate}); 
       } 

       //second date 
       var twodaysago = DateTime.Today.AddDays(-2); 
       string dayoftheweek2 = twodaysago.DayOfWeek.ToString(); 
       DateTime storeseconddate; 
       if (dayoftheweek2 == "Sunday") 
       { 
        var seconddate = DateTime.Today.AddDays(-3); 
        storeseconddate = seconddate; 
        rangeList.Add(new MyDates() {Dateseries = storeseconddate}); 
       } 
       else 
       { 
        storeseconddate = twodaysago; 
        rangeList.Add(new MyDates() {Dateseries = storeseconddate}); 
       } 

       //Third date 
       var threedaysago = DateTime.Today.AddDays(-3); 
       string dayoftheweek3 = threedaysago.DayOfWeek.ToString(); 
       DateTime storethirddate; 
       if (dayoftheweek3 == "Sunday") 
       { 
        var thirddate = DateTime.Today.AddDays(-4); 
        storethirddate = thirddate; 
        rangeList.Add(new MyDates() {Dateseries = storethirddate}); 
       } 
       else 
       { 
        storethirddate = threedaysago; 
        rangeList.Add(new MyDates() {Dateseries = storethirddate}); 
       } 

       dataGridView1.DataSource = rangeList.OrderByDescending(j=>j.Dateseries).ToList();   

      } 


      public class MyDates 
      {  
       public DateTime Dateseries { get; set; } 
      } 

結果は土曜日、次のようになります - 2016年11月5日

答えて

0

をさてあなたは、使用してそれを行うことができますlinq。 整数配列はきれいに美しいものではないかもしれませんが、おそらく誰かがもっと洗練された解決法を提案するかもしれません。

IEnumerable<MyDates> rangeList = new [] {1, 2, 3, 4}.Select(n => DateTime.Now.Subtract(TimeSpan.FromDays(n))) // Transforming the integer (kind of index of days) array into dates. 
    .Where(n => n.DayOfWeek != DayOfWeek.Sunday).Take(3) // Removing the Sunday and taking 3 days only. 
    .Select(n => new MyDates() { Dateseries = n }); // Converting the date in your MyDates structure. 
+0

ありがとうございました。少なくとも私のコードよりも短いです。できます。唯一のことは、この形式で時刻を返すことです。 11/8/2016 2.55pm – user2320476

+0

UIでですか?このコードはあなたに日付を与え、あなたはあなたのUIにこの日付をあなたが望むように表示する方法を選ぶことができます。あなたがもっと制御したいなら、あなたのMyDateの 'ToString()'メソッドをオーバーライドして、 '$" {Dateseries.DayOfWeek} - {Dateseries.ToString( "d"}} "'のようなものを返すことができます。 –

+0

それは正しいです。ありがとう – user2320476

関連する問題