我有一个linq查询,它正在对db上下文实体进行聚合。
var filterRange = from row in db.Venues
group row by true into r
select new
{
minRent = r.Min(x => x.Rent),
maxRent = r.Max(x => x.Rent),
minCapacity = r.Min(x => x.Capacity),
maxCapacity = r.Max(x => x.Capacity)
};
ViewBag.mr = filterRange.Select(x => x.minRent);
ViewBag.xr = filterRange.Select(x => x.maxRent);
在razor渲染期间,mr和viewr中的xr具有查询而不是值。
查看
<input type="hidden" id="mr" name="mr" value="@(ViewBag.mr)" />
要让viewbag包含值,需要做些什么?
答案 0 :(得分:2)
首先(为了避免迭代相同的序列两次),你应该从一般查询中“实现”结果集:
var filterRange = (from row in db.Venues
group row by true into r
select new
{
minRent = r.Min(x => x.Rent),
maxRent = r.Max(x => x.Rent),
minCapacity = r.Min(x => x.Capacity),
maxCapacity = r.Max(x => x.Capacity)
}).ToList();
接下来,您还必须从派生查询中“实现”结果集:
ViewBag.mr = filterRange.Select(x => x.minRent).ToList();
ViewBag.xr = filterRange.Select(x => x.maxRent).ToList();
这将执行一次“大”查询,然后“小”查询对获得的结果集进行操作,因此这些查询非常便宜。
答案 1 :(得分:1)
LINQ查询返回一个IEnumerable,您需要调用一些方法来枚举该列表以便评估查询。在这种情况下,您应该在每次选择呼叫后添加ToArray呼叫。