列表视图控制器方法中的if语句

本文关键字:if 语句 方法 视图 控制器 列表 | 更新日期: 2023-09-27 18:05:03

在我的控制器方法中有以下代码,用于向成员类型的List View提供数据:

[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语句应用于成本值,即,如果今天的月份等于数据库中每个成员类型的ReducedMonth,则成本值等于成员类型ReducedCost值,如果不是,则使其等于其成本。每个MembershipType可以有不同的减少月和成本

我不确定正确的语法来正确编写这个

列表视图控制器方法中的if语句

我输入的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将是此处服务器所在时区的月份…这真的是你想要的吗?假设您希望它位于特定的时区,我会明确说明……否则,您可能会遇到一些难以诊断的问题。