2016-11-23 46 views
0
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是一样的我要显示结果值在同一行上:

@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> 
} 

请让我知道如果您需要我说明更多。当我看到逻辑时,它看起来很直接,但是当我开始编码时,我无法看到它的方向。

在此先感谢。

+0

是'-'减法还是分隔符? – Sefe

+0

对不起,没有说清楚。这是一个分隔符 – MohammedT

回答

1

您可以将您的项目由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> 
} 
+0

我喜欢这个答案!简单而整洁,无需创建额外的对象!非常感谢@Sefe! – MohammedT

1

在模型中创建一个返回所有resultTypeId作为一个列表属性:

public IEnumerable<int> ResultsTypeIds 
{ 
    get 
    { 
     return Results.DistinctBy(x=>x.resultTypeId).Select(x=>x.resultTypeId);  
    } 
} 

在你看来,你可以再itterate超过该集合

@foreach(var resultTypeId in Model.ResultsTypeIds) 
{ 
    <ul> 
    @foreach(var result in Model.Results) 
    { 
     <li>@result.resultValue</li> 
    } 
    </ul> 
} 
1

我会建议格式化您的数据的方式视图希望它是,如:

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> 
} 

你可能想别的东西作为视图的标记,但它应该给你理念。

+0

非常感谢。我喜欢按照视图预期的方式来格式化数据的建议。由于良好的做法,应该成为公认的答案! – MohammedT

相关问题