按类型配对列表中的项目,并在一个循环中显示在视图中
Pair items in a list by their type and display in the view in one loop
Model.Results
是一个包含结果模型列表的列表对象。
public List<result> Results {get; set;}
class result
{
public int Id {get; set;}
public int resultId {get; set;}
public string resultName {get; set;}
public int resultTypeId {get; set;}
public string resultValue {get; set;}
}
我现在需要做的是在视图中直接显示该列表:
@foreach(var result in Model.Results)
{
<ul>
<li> @result.resultName</li>
<li> @result.resultValue</li>
</ul>
}
但我需要做的是检查 resultTypeId 是否相同 我想在同一行显示 resultValue:
@foreach(var result in Model.Results)
{
<ul>
<li> @result.resultName</li>
@if(result.resultTypeId == any other result.resultTypeId in the list)
{
<li> @result.resultValue - @the other result.resultValue</li>
}
@else
{
<li> @result.resultValue</li>
}
</ul>
}
如果您需要我说明更多,请告诉我。当我查看逻辑时,它看起来很简单,但当我开始编码时,我看不到绕过它的方法。
提前致谢。
在您的模型中创建一个 属性 returns 所有 resultTypeId
作为列表:
public IEnumerable<int> ResultsTypeIds
{
get
{
return Results.DistinctBy(x=>x.resultTypeId).Select(x=>x.resultTypeId);
}
}
然后您可以在您的视图中遍历该集合
@foreach(var resultTypeId in Model.ResultsTypeIds)
{
<ul>
@foreach(var result in Model.Results)
{
<li>@result.resultValue</li>
}
</ul>
}
您可以按 ID 对项目进行分组:
@foreach(var resultGroup in Model.Results.GroupBy(result => result.resultTypeId))
{
<ul>
<li> @resultGroup.First().resultName</li>
@foreach (var result in resultGroup) {
<li> @result.resultValue</li>
}
</ul>
}
我建议按照视图期望的方式格式化您的数据,例如:
Model.Results.GroupBy(r=>r.resultTypeId)
.Select(gr=>new {resultTypeId = gr.Key, resultName = gr.First().resultName, Items = gr.ToList()})
.ToList();
比起在视图上简单地遍历组和每个组中的项目:
@foreach(var group in Model.GroupedResults)
{
<ul>
<li> @group.resultName</li>
<li>
@foreach(var item in group.Items)
{
@item.resultValue <br/>
}
</li>
</ul>
}
您可能想要其他东西作为视图标记,但它应该能给您灵感。
Model.Results
是一个包含结果模型列表的列表对象。
public List<result> Results {get; set;}
class result
{
public int Id {get; set;}
public int resultId {get; set;}
public string resultName {get; set;}
public int resultTypeId {get; set;}
public string resultValue {get; set;}
}
我现在需要做的是在视图中直接显示该列表:
@foreach(var result in Model.Results)
{
<ul>
<li> @result.resultName</li>
<li> @result.resultValue</li>
</ul>
}
但我需要做的是检查 resultTypeId 是否相同 我想在同一行显示 resultValue:
@foreach(var result in Model.Results)
{
<ul>
<li> @result.resultName</li>
@if(result.resultTypeId == any other result.resultTypeId in the list)
{
<li> @result.resultValue - @the other result.resultValue</li>
}
@else
{
<li> @result.resultValue</li>
}
</ul>
}
如果您需要我说明更多,请告诉我。当我查看逻辑时,它看起来很简单,但当我开始编码时,我看不到绕过它的方法。
提前致谢。
在您的模型中创建一个 属性 returns 所有 resultTypeId
作为列表:
public IEnumerable<int> ResultsTypeIds
{
get
{
return Results.DistinctBy(x=>x.resultTypeId).Select(x=>x.resultTypeId);
}
}
然后您可以在您的视图中遍历该集合
@foreach(var resultTypeId in Model.ResultsTypeIds)
{
<ul>
@foreach(var result in Model.Results)
{
<li>@result.resultValue</li>
}
</ul>
}
您可以按 ID 对项目进行分组:
@foreach(var resultGroup in Model.Results.GroupBy(result => result.resultTypeId))
{
<ul>
<li> @resultGroup.First().resultName</li>
@foreach (var result in resultGroup) {
<li> @result.resultValue</li>
}
</ul>
}
我建议按照视图期望的方式格式化您的数据,例如:
Model.Results.GroupBy(r=>r.resultTypeId)
.Select(gr=>new {resultTypeId = gr.Key, resultName = gr.First().resultName, Items = gr.ToList()})
.ToList();
比起在视图上简单地遍历组和每个组中的项目:
@foreach(var group in Model.GroupedResults)
{
<ul>
<li> @group.resultName</li>
<li>
@foreach(var item in group.Items)
{
@item.resultValue <br/>
}
</li>
</ul>
}
您可能想要其他东西作为视图标记,但它应该能给您灵感。