2

2 つの変数を宣言してクエリを実行する次のコードがあります。変数は何があっても作成されるのでobject does not exist in current context error、クエリが実行されようとしているときに を取得して驚いています。どうすればこのようなことができますか?それは何度か起こりました。また、変数の宣言で if/else ステートメントを使用しようとしましたが、うまくいきませんでした。(その後、エラーが発生しますinvalid expression if)これが機能するには何を言う必要がありますか?

        if (from_date == null) {
           var from_date_choose = DateTime.Today.AddDays(-30);
        } else { 
            var from_date_choose = from_date;
        }

        if (to_date == null) {
           var to_date_choose = DateTime.Today;
        } else {
            var to_date_choose = to_date;
        }

        var voyages = db.Voyages
       .Where(v => v.ArrivalDatetime >= from_date_choose)
       .Where(v => v.ArrivalDatetime <= to_date_choose);
4

4 に答える 4

3

if ステートメント内で宣言した内容は、その if ステートメントのスコープ内でのみアクセスできます。これを変数のスコープと呼びます。このようにメソッドを変更します

  DateTime from_date_choose;
  DateTime to_date_choose;

  if (from_date == null) {
       from_date_choose = DateTime.Today.AddDays(-30);
    } else { 
       from_date_choose = from_date;
    }

    if (to_date == null) {
       to_date_choose = DateTime.Today;
    } else {
       to_date_choose = to_date;
    }

    var voyages = db.Voyages
   .Where(v => v.ArrivalDatetime >= from_date_choose)
   .Where(v => v.ArrivalDatetime <= to_date_choose);
于 2013-07-26T15:19:00.287 に答える
3

from_date_choose と from_date_choose は、if ステートメントのスコープ内で宣言されています。where 句のスコープには含まれていません。あなたの最善の最善の方法は、それらを最初に宣言し、後でそれらに割り当てることです。それらを一番上で宣言し、デフォルトとして使用するものに設定し、選択した値がこのように null でない場合はオーバーライドします

    DateTime from_date_choose = DateTime.Today.AddDays(-30);
    DateTime to_date_choose = DateTime.Today;

    if (from_date != null) {
       var from_date_choose = from_date;
    }

    if (to_date != null) {
        var to_date_choose = to_date;
    }

    var voyages = db.Voyages
   .Where(v => v.ArrivalDatetime >= from_date_choose)
   .Where(v => v.ArrivalDatetime <= to_date_choose);
于 2013-07-26T15:17:01.187 に答える