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

13

像这样修改代码,否则你的变量只存在于本地范围内。您还需要使用from_date.Valueand to_date.Value(我假设这些是 type Nullable<DateTime>):

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

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

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

您也可以使用三元运算符,例如:

DateTime from_date_choose = from_date == null ? DateTime.Today.AddDays(-30) : from_date.Value;

或者正如 Jeppe Stig Nielsen 建议的那样使用合并运算符,例如:

DateTime from_date_choose = from_date ?? DateTime.Today.AddDays(-30);
于 2013-07-26T15:16:29.740 回答
5

您已声明from_date_chooseto_date_choose在局部变量范围内。你不能在你声明的地方访问它们voyages

您需要在与 相同的范围内声明from_date_choose和,例如:to_date_choosevoyages

DateTime from_date_choose;
if (from_date == null) {
   from_date_choose = DateTime.Today.AddDays(-30);
} else { 
    from_date_choose = from_date;
}
于 2013-07-26T15:16:14.607 回答
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 回答
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 回答