重构循环以在 MVC Razor 中的其他属性相同时合并一个属性 ASP.net



我有一个数据集,目前生成如下输出:

代码:第 1 部分:视图 -

@foreach (var dt in Model.PlaceList) {
<tr class="Gap">
<td>
<div class="col-sm-12">
<h3>@dt.PlaceName</h3><br />
<span>@dt.OpenTimings</span><br />
<span>@dt.Slot</span><br />
<span>@dt.ActivityName</span><br />
<span>@dt.Address</span><br />
</div>
</td>
</tr>
}

第 2 部分:从数据库检索数据

var gPlaceList = (from l in _appdb.GetPlaceDetails
select new GetListPlaces {
PlaceName = l.PlaceName,
OpenTimings = l.OpenTimings,
Slot = l.Slot,
Activity = l.Activity,
Address = l.Address
}).ToList();

第 3 部分:用于填充条目的数据结构

public partial class GetListPlaces {
public string PlaceName { get; set; }
public string OpenTimings { get; set; }
public string Slot { get; set; }
public string Activity { get; set; }
public string Address { get; set; }
}

在查看一个 Place 的输出结果时,我们得到的数据组如下所示:

电流输出:

Place Name
Open Timings
Slot1
Activity
Address
Place Name
Open Timings
Slot2
Activity
Address 
Place Name
Open Timings
Slot3
Activity
Address
Place Name
Open Timings
Slot4
Activity
Address
Place Name
Open Timings
Slot5
Activity
Address

我们希望将结果合并为如下所示,对于其他 4 列匹配的所有结果。

预期输出:

Place Name
Open Timings
Slot1, Slot2, Slot3, Slot4, Slot5
Activity
Address

这里的数据只是一个示例。 我们网站的实际输出有数千个结果,像这样合并数据将有助于我们减少显示区域并减少数据重复。

对数据进行分组并显示它,使用字符串扩展方法"Join"以逗号分隔

@foreach (var dt in Model.PlaceList.GroupBy(x=> new { x.PlaceName, x.OpenTimings, x.ActivityName, x.Address }))
{
<tr class="Gap">
<td>
<div class="col-sm-12">
<h3>@dt.Key.PlaceName</h3><br />
<span>@dt.Key.OpenTimings</span><br />
<span>@string.Join(",", dt.ToList().Select(x=>x.SlotNo))</span><br />
<span>@dt.Key.ActivityName</span><br />
<span>@dt.Key.Address</span><br />
</div>
</td>
</tr>
}

使用分组!只需按预期相同的值对记录进行分组,然后使用 Select 形成新记录:

Model.PlaceList
.GroupBy(x => {x.PlaceName, x.OpenTimings, x.ActivityName, x.Address})
.Select(group => new
{
PlaceName = group.Key.PlaceName,
OpenTimings = group.Key.OpenTimings,
...,
Slots = String.Join(", ", group.Select(x => x.SlotNo))
})

现在,一条记录将准确包含您需要的种类信息,您可以遍历此查询的结果以输出视图。

最新更新