C# 当前上下文中不存在if/else变量声明和对象错误

C# 当前上下文中不存在if/else变量声明和对象错误,c#,.net,conditional,C#,.net,Conditional,下面的代码声明了两个变量,然后执行一个查询。不管发生什么,变量都会被创建,所以当查询即将执行时,我很惊讶得到一个对象在当前上下文错误中不存在。我怎么能做这样的事?这已经发生过好几次了。我还尝试在变量声明中使用if/else语句,但没有成功。然后我得到了错误的无效表达式,如果我需要说什么才能使它工作呢 if (from_date == null) { var from_date_choose = DateTime.Today.AddDays(-30);

下面的代码声明了两个变量,然后执行一个查询。不管发生什么,变量都会被创建,所以当查询即将执行时,我很惊讶得到一个对象在当前上下文错误中不存在。我怎么能做这样的事?这已经发生过好几次了。我还尝试在变量声明中使用if/else语句,但没有成功。然后我得到了错误的无效表达式,如果我需要说什么才能使它工作呢

        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);
您已经在局部变量范围内声明了from_date_choose和to_date_choose。你不能在你宣布航行的地方访问它们

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

DateTime from_date_choose;
if (from_date == null) {
   from_date_choose = DateTime.Today.AddDays(-30);
} else { 
    from_date_choose = from_date;
}
您已经在局部变量范围内声明了from_date_choose和to_date_choose。你不能在你宣布航行的地方访问它们

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

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

这样修改代码,否则变量只存在于局部范围内。您还需要使用from_date.Value和to_date.Value,我假设它们的类型为Nullable:

或者如Jeppe Stig Nielsen所建议的,使用聚结算子,例如:

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

这样修改代码,否则变量只存在于局部范围内。您还需要使用from_date.Value和to_date.Value,我假设它们的类型为Nullable:

或者如Jeppe Stig Nielsen所建议的,使用聚结算子,例如:

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

from_date_choose和from_date_choose在if语句的范围内声明。 where子句的作用域中没有它们。最好是在顶部声明它们,然后稍后分配给它们。我会在顶部声明它们,并将它们设置为您将用作默认值的任何值,然后在所选值不是空值时覆盖它

    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);
  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);

from_date_choose和from_date_choose在if语句的范围内声明。 where子句的作用域中没有它们。最好是在顶部声明它们,然后稍后分配给它们。我会在顶部声明它们,并将它们设置为您将用作默认值的任何值,然后在所选值不是空值时覆盖它

    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);
  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);

在if语句中声明的内容只能在该if语句范围内访问。这就是所谓的变量。像这样改变你的方法

    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);
  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);

在if语句中声明的内容只能在该if语句范围内访问。这就是所谓的变量。像这样改变你的方法

    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);
  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);
甚至比?:运算符更好,这是空合并运算符的典型用法,因此DateTime from_date_choose=from_date??DateTime.Today.AddDays-30;。甚至比?:运算符更好,这是空合并运算符的典型用法,因此DateTime from_date_choose=from_date??DateTime.Today.AddDays-30;。