2017-02-07 2 views
0

問題を解決しようとしています。私は次のフォーマット "dd.MM.yyyy - dd.MM.yyyy"の日付範囲で満たされた文字列を持っています。C#文字列には2つの日付に分割されるべきdaterangeが含まれています

var datest = shippeddaterange.Split(new char[] { '-' }, StringSplitOptions.RemoveEmptyEntries); 
var startDate = DateTime.Parse(datest[0]); 
var endDate = DateTime.Parse(datest[1]); 

ここでは2つの変数に分割したいので、うまく動作するラムダクエリを使用できます。私の新しい2つの変数は、startDateendDateという名前にする必要があります。

data.Container = db.Container 
    .Where(a => a.ShippedDate >= startDate && a.ShippedDate <= endDate) 
    .ToList(); 

私はアプリをコンパイルする場合は、配列の値は、あなたには、いくつかの防御的なコーディングを行うために必要なインデックスの範囲

+1

文字列にハイフンが含まれていないか、文字列の先頭/末尾にのみあるため、 'datest'配列には1つの項目しか含まれていません。 –

+1

または全くありません。文字列があなたの行動にも着いたかどうか確認してください。 –

+0

私はティムを理解していません。 これは完全に動作します。 var start = new DateTime(2010、1、1); var endDate =新しいDateTime(2019,1,1); – NinjaCoder

答えて

2

外であることを、私にエラーを与えます。あなたが失礼な目覚めのために入るようにGoldilocksの状況を想定しないでください。入力が悪い場合は、2つのアイテムで終わることはありません。

public PartialViewResult SearchData(shippeddaterange) { 
    data = new ContentViewModel(); 
    using (var db = new PLSDb()) { 
     var datest = shippeddaterange.Split(new char[] { '-' }, StringSplitOptions.RemoveEmptyEntries); 
     if(datest.Length == 2) { 
      var format = "dd.MM.yyyy"; 
      var provider = CultureInfo.InvariantCulture; 
      var startDate = DateTime.ParseExact(datest[0].Trim(), format, provider); 
      var endDate = DateTime.ParseExact(datest[1].Trim(), format, provider); 

      data.Container = db.Container 
       .Where(a => a.ShippedDate >= startDate && a.ShippedDate <= endDate) 
       .ToList();     
     }    
    } 
    return PartialView(data);   
} 
+0

SearchData(赤い下線付き)上にマウスを置くと、「すべてのコードパスが値を返すわけではありません」というエラーメッセージが表示されます。 – NinjaCoder

+0

質問のコードを更新します。コメントにあるときにそれを理解することは非常に難しい – Nkosi

+0

else条件に何か必要です(datest.Lengthが2でない場合) – Nkosi

1

ここはかなりいいです。私は、メソッドpublic ActionResult Index()に、フィルタが動作する前にデータをフィルタリングする必要があると書きます。助けてくれてありがとう!

public PartialViewResult SearchData(string shippeddaterange) 
    {    
     using (var db = new PCSDb()) 
     { 

      var datest = shippeddaterange.Split(new char[] { '-' }, StringSplitOptions.RemoveEmptyEntries); 
      if (datest.Length == 2) 
      { 
       var format = "dd.MM.yyyy"; 
       var provider = CultureInfo.InvariantCulture; 
       var startDate = DateTime.ParseExact(datest[0].Trim(), format, provider); 
       var endDate = DateTime.ParseExact(datest[1].Trim(), format, provider); 

       var data = new ContentViewModel(); 

       data.Container = db.Container.Where(a => a.ShippedDate >= startDate && a.ShippedDate <= endDate).ToList(); 
       return PartialView(data); 
      } 
      else 
      { 
       return PartialView("NameOfANewView"); 
      }     
     } 
    } 
関連する問題