如何从多个分组数据viewbag中获取Key?
How to get Key from multiple grouped data viewbag?
控制器
我有按 2 个字段分组的数据
lst = db.Database.SqlQuery<GridReportViewModel>(sqlquery).ToList();
Viewbag.DataGrid = lst.GroupBy(x => new { x.PosisiJabatanId, x.AplikasiId });
查看
如何从分组数据中获取Key
@{int i = 1;}
@foreach (var item in @ViewBag.DataGrid)
{
@:<tr>
<td>@i</td>
@*<td>@item.Key.PosisiJabatanId</td>*@ @*ERROR*@
foreach (GridReportViewModel item2 in @item)
{
<td>@item2.NilaiKolom</td>
}
i = i + 1;
@:</tr>
}
错误:'object' 不包含 'Key'
的定义
调试项目:
enter image description here
你用匿名类型值填充了你的 ViewBag
并且你不能将它们转换为 View
,你应该改变这一行
lst.GroupBy(x => new { x.PosisiJabatanId, x.AplikasiId });
到
lst.GroupBy(x => new MyObject { x.PosisiJabatanId, x.AplikasiId });
并在 View
中将 ViewBag
转换为 MyObject
@foreach (var item in (MyObject)ViewBag.DataGrid) {...}
在您的查询中添加 select,如下所示
lst = db.Database.SqlQuery<GridReportViewModel>(sqlquery).ToList();
Viewbag.DataGrid = lst.GroupBy(x => new { x.PosisiJabatanId, x.AplikasiId })
.Select(g => new { Key = g.Key, Items = g.ToList() });
在您的视图中使用如下
@{int i = 1;}
@foreach (var item in @ViewBag.DataGrid)
{
@:<tr>
<td>@i</td>
<td>@item.Key.PosisiJabatanId</td>
foreach (GridReportViewModel item2 in @item.Items)
{
<td>@item2.NilaiKolom</td>
}
i = i + 1;
@:</tr>
}
您需要使用 属性 获取数据。
当你使用 new
时,它是 return 匿名对象,所以你需要使用动态对象。
获得动态对象 key
的值后,您需要再次使用动态对象 val
.
@{int i = 1;}
@foreach (var item in @ViewBag.DataGrid)
{
@:<tr>
<td>@i</td>
var val = item.GetType()
.GetProperty("Key")
.GetValue(item);
var PosisiJabatanId = val.GetType()
.GetProperty("PosisiJabatanId")
.GetValue(val);
var AplikasiId = val.GetType()
.GetProperty("AplikasiId")
.GetValue(val);
<td>@PosisiJabatanId</td>
<td>@AplikasiId</td>
i = i + 1;
@:</tr>
}
控制器
我有按 2 个字段分组的数据
lst = db.Database.SqlQuery<GridReportViewModel>(sqlquery).ToList();
Viewbag.DataGrid = lst.GroupBy(x => new { x.PosisiJabatanId, x.AplikasiId });
查看
如何从分组数据中获取Key
@{int i = 1;}
@foreach (var item in @ViewBag.DataGrid)
{
@:<tr>
<td>@i</td>
@*<td>@item.Key.PosisiJabatanId</td>*@ @*ERROR*@
foreach (GridReportViewModel item2 in @item)
{
<td>@item2.NilaiKolom</td>
}
i = i + 1;
@:</tr>
}
错误:'object' 不包含 'Key'
的定义调试项目: enter image description here
你用匿名类型值填充了你的 ViewBag
并且你不能将它们转换为 View
,你应该改变这一行
lst.GroupBy(x => new { x.PosisiJabatanId, x.AplikasiId });
到
lst.GroupBy(x => new MyObject { x.PosisiJabatanId, x.AplikasiId });
并在 View
ViewBag
转换为 MyObject
@foreach (var item in (MyObject)ViewBag.DataGrid) {...}
在您的查询中添加 select,如下所示
lst = db.Database.SqlQuery<GridReportViewModel>(sqlquery).ToList();
Viewbag.DataGrid = lst.GroupBy(x => new { x.PosisiJabatanId, x.AplikasiId })
.Select(g => new { Key = g.Key, Items = g.ToList() });
在您的视图中使用如下
@{int i = 1;}
@foreach (var item in @ViewBag.DataGrid)
{
@:<tr>
<td>@i</td>
<td>@item.Key.PosisiJabatanId</td>
foreach (GridReportViewModel item2 in @item.Items)
{
<td>@item2.NilaiKolom</td>
}
i = i + 1;
@:</tr>
}
您需要使用 属性 获取数据。
当你使用 new
时,它是 return 匿名对象,所以你需要使用动态对象。
获得动态对象 key
的值后,您需要再次使用动态对象 val
.
@{int i = 1;}
@foreach (var item in @ViewBag.DataGrid)
{
@:<tr>
<td>@i</td>
var val = item.GetType()
.GetProperty("Key")
.GetValue(item);
var PosisiJabatanId = val.GetType()
.GetProperty("PosisiJabatanId")
.GetValue(val);
var AplikasiId = val.GetType()
.GetProperty("AplikasiId")
.GetValue(val);
<td>@PosisiJabatanId</td>
<td>@AplikasiId</td>
i = i + 1;
@:</tr>
}