【问题标题】:if Statement within List View Controller Method列表视图控制器方法中的 if 语句
【发布时间】:2015-07-28 20:23:50
【问题描述】:

我的控制器方法中有以下代码向成员类型的列表视图提供数据:

[HttpGet]
public ActionResult SelectMembershipType(int clubId)
    {
        //Populate the list
        var membershipTypes = from s in db.MembershipTypes
                              where (s.ClubId == clubId  && s.Dormant == false)
                              orderby s.Type
                              select s;

        //Generate the ViewModel with the appropriate membership types
        var viewModel = membershipTypes.Select(t => new   SelectMembershipTypeViewModel
        {
            //Select appropriate Cost based on current month
            if(DateTime.Now.Month == t.ReducedMonth)
            {
                Cost = t.ReducedCost;
            }
            else
            {
                Cost = t.Cost;
            }
            ClubId = club.ClubId,
            Name = club.Name,              
            MembershipName = t.Type,
            MembershipType = t.MembershipTypeClassification.Type,
            MembershipTypeId = t.MembershipTypeId,
        });
        return View(viewModel);
    }

我放入的 if 语句不起作用,它会引发几个错误。 我正在尝试将 if 语句应用于 Cost 的值,即如果今天的月份等于数据库中每个会员类型的 ReducedMonth,则使 Cost 的值等于 Membership Types ReducedCost 值,如果不等于其取而代之的是成本。 每个 MembershipType 可以有不同的减少月份和费用

我不确定正确的语法来正确编码

【问题讨论】:

标签: c# asp.net-mvc


【解决方案1】:

我放入的 if 语句不起作用,它会引发几个错误。

是的,它会 - 你已经把它放在一个对象初始化器中。对象初始化器不是任意的代码块——它们基本上是property = value 赋值的列表。 (比这稍微多一点,但是...)

幸运的是,在这种情况下,您可以改用条件运算符:

var viewModel = membershipTypes.Select(t => new SelectMembershipTypeViewModel
{
    //Select appropriate Cost based on current month
    Cost = DateTime.Now.Month == t.ReducedMonth ? t.ReducedCost : t.Cost,
    ClubId = club.ClubId,
    Name = club.Name,              
    MembershipName = t.Type,
    MembershipType = t.MembershipTypeClassification.Type,
    MembershipTypeId = t.MembershipTypeId,
});

这将编译,但由于将查询转换为 SQL,它可能无法正常工作。您可能需要先提取DateTime.Now.Month 部分:

int month = Date.Now.Month;
var viewModel = membershipTypes.Select(t => new SelectMembershipTypeViewModel
{
    //Select appropriate Cost based on current month
    Cost = t.ReducedMonth == month ? t.ReducedCost : t.Cost,
    ClubId = club.ClubId,
    Name = club.Name,              
    MembershipName = t.Type,
    MembershipType = t.MembershipTypeClassification.Type,
    MembershipTypeId = t.MembershipTypeId,
});

请注意,DateTime.Now.Month 将是此处服务器所在时区中的月份...这绝对是您想要的吗?假设您希望它位于特定时区,我会明确说明...否则您可能会遇到一些难以诊断的问题。

【讨论】:

  • 非常感谢 Jon,第一个选项效果很好。感谢您的解释,现在它更有意义了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多