2015-07-28 96 views
0

我有我的控制器方法中下面的代碼來提供數據,列表視圖會員類型:如果內部列表視圖控制器的方法聲明

[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類型使成本的值等於成員資格類型ReducedCost值,如果不是使其等於其成本代替。 每個MembershipType可以有不同的減小月份與成本

我不知道正確的語法的實現代碼正確

+1

什麼是確切的錯誤信息? – ekad

+1

您的問題已回答兩次:http://stackoverflow.com/questions/2234091/object-initializer-and-dynamically-specifying-properties和http://stackoverflow.com/questions/3229188/c-sharp-initialiser-有條件分配 –

回答

5

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將在服務器這裏的時區的月份是......絕對你想要什麼?假設你希望它在特定的時區,我會明確表示......否則你可能會遇到一些難以診斷的問題。

+0

非常感謝喬恩,第一個選項完美運作。感謝你的解釋,現在它變得更有意義。 –

相關問題