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

C# 列表视图控制器方法中的if语句,c#,asp.net-mvc,C#,Asp.net Mvc,我的控制器方法中包含以下代码,用于向成员类型列表视图提供数据: [HttpGet] public ActionResult SelectMembershipType(int clubId) { //Populate the list var membershipTypes = from s in db.MembershipTypes where (s.ClubId == clubId &

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

[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值,即如果每个成员类型的todays month等于数据库中的reduced month,则使Cost值等于成员类型reduced Cost值,如果不是,则改为使其等于其成本。 每种会员资格类型都可以有不同的缩减月数和成本

我不确定正确的语法来正确地编写代码

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

我输入的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,第一个选项非常有效。谢谢你的解释,现在它更有意义了。非常感谢乔恩,第一种选择非常有效。也谢谢你的解释,现在它更有意义了。