2014-02-25 30 views
1

我有一个相当直截了当的要求 - 填充一个视图模型,其具有的SelectList作为其属性之一 - NewOccs是在模型上定义为:故障在控制器代码填充选择列表的 - C#MVC

public class RatesList 
    { 
    [Key] 
    public long TypeID { get; set; } 
    public string TypeName { get; set; } 
    public int TypeCount { get; set; } 
    public IEnumerable<SelectListItem> NewOccs { get; set; } 
    } 

我的控制器代码来填充它:

var rooms = dbt.Rooms.Where(r => r.hotel_id == AccID) 
       .GroupBy(p => p.RoomTypes).Select(g => new RatesList 
       { 
        TypeName = g.Key.type_name, 
        TypeCount = g.Count(), 
        NewOccs = dbt.Rates.Where(rt => rt.type_id == g.Key.type_id).GroupBy(rt => rt.occ).AsEnumerable() 
         .Select(proj => new SelectListItem 
         { 
          Text = proj.Key, 
          Value =proj.Key 
         }) 

       }).ToList(); 

的价格表就应该从获取其信息是:

public class Rates 
{ 
    public int id { get; set; } 
    public long type_id { get; set; } 
    public DateTime ratedate { get; set; } 
    public decimal rate { get; set; } 
    public string occ { get; set; } 
} 

如何访问我的费率表中的任何其他字段 - 当我填充SelectList?例如,在VSExpressIDE intellisense中,我只能输入proj.Key - 其他属性不存在。我想occ是键/值,我想文本是occrate串联 - 即:

Text = proj.occ + ' ' + rate.ToString() 

...但rateocc不能在智能感知被发现。

谢谢你,马克

回答

2

如果你通过你的调试步骤,你会看到GroupBy()提供GroupedEnumerable,其中包含的按键。密钥为Lookup<string, Rates>,因为您在字符串上使用了GroupBy。

如果您将您的选择更改为SelectMany,您会看到所有价格。但是这将打破GroupBy的目的。我不能完全确定你到底想要什么,但here是一个很好的指导GROUPBY

1

像这样:

public class Client 
{ 
    public int SelectedSexId { get; set; } 
    public IList<Sex> SexList { get; set; } 
    public IList<SelectListItem> SexListSelectListItems 
    { 
     get 
     { 
      SexList=SexList??new List<Sex>(); 
      var list = (from item in SexList 
         select new SelectListItem() 
         { 
          Text = item.Name, 
          Value = item.Id.ToString(CultureInfo.InvariantCulture) 
         }).ToList(); 
      return list; 
     } 
     set { } 
    } 
}