我有一个相当直接的要求 - 填充一个视图模型,该模型将 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; }
}
如何访问费率表中的任何其他字段 - 当我填充选择列表时? 例如,在VSExpressIDE中,智能感知只允许我键入proj.Key
- 其他属性不存在。 我希望occ
是键/值,我希望文本是occ
和rate
的串联 - 即:
Text = proj.occ + ' ' + rate.ToString()
。但是rate
和occ
在智能感知中找不到。
谢谢你,马克
如果单步执行调试器,您将看到GroupBy()
提供了一个包含密钥的GroupedEnumerable
。 键Lookup<string, Rates>
,因为您在字符串上使用 GroupBy。
如果您将"选择"更改为"精选",则会看到所有费率。 但这会破坏GroupBy的目的。 我不完全确定你最后想要什么,但这里有一个很好的指南来 GroupBy
像这样:
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 { }
}
}