我有一个相当直接的要求 - 填充一个视图模型,它有一个SelectList作为其属性之一 - NewOccs在模型上定义为:
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
成为键/值,我希望文本是occ
和rate
的串联 - 即:
Text = proj.occ + ' ' + rate.ToString()
...但在intellisense中找不到rate
和occ
。
谢谢Mark,
答案 0 :(得分:2)
如果您单步执行调试器,则会看到GroupBy()
提供GroupedEnumerable
,其中包含密钥。密钥是Lookup<string, Rates>
,因为您在字符串上使用了GroupBy。
如果您将Select更改为SelectMany,则会看到所有费率。但那会破坏GroupBy的目的。我最终并不完全确定你想要什么,但here是GroupBy的好指南
答案 1 :(得分: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 { }
}
}