无法同时迭代两个不同的集合c#

时间:2015-01-14 13:17:52

标签: c# .net asp.net-mvc linq asp.net-mvc-4

我正在ASP.NET MVC中工作,我正在尝试将两个集合组合在一个循环中执行我尝试过ZIP方法但是如果一个集合为空则它不会返回任何内容。我尝试过Concat方法但它正在解决这个错误

System.Collection.Generic.ICollection<Project.Entities.TDetail> does not contains definition for 'Concat'.

我的ViewModel:

public class CategoryViewModel
{
    public virtual ICollection<TDetail> Details { get; set; } 
    public virtual ICollection<TRequest> Requests { get; set; } 
}

My Loop:

@foreach (var item in Model.Details.Concat(Model.Requests))
{
}

ZIP方法尝试但失败:

var request = Model.Requests.ToList();
var details = Model.Details.ToList();
var final = details.Zip(request, (x, y) => new { Detail = x, Request = y });
@foreach (var item in final)
{
}

我已经花了3天的时间,但找不到任何解决方案,请帮助我。

1 个答案:

答案 0 :(得分:2)

  

我只是想并排列出它们,它们之间没有关系

然后,ConcatZip都不适合您。 Concat会将项目附加到列表中(“垂直”)。 Zip会为您提供“并排”的集合,但只会为您提供与最短集合一样多的元素。

您可以直接for循环:

var requests = Model.Requests.ToList();
var details = Model.Details.ToList();
var length = Math.Max(requests.Count, details.Count);
@for(int i=0 ; i< length ; i++)
{
    if(i <= request.Count)
    {
       var request = requests[i];
       @: html code here
    }
    if(i <= details.Count)
    {
       var detail = deatils[i]
       @: html code here
    }
} 

或者单独循环并创建两个不同的UI元素,使用样式将它们并排放置

var requests = Model.Requests.ToList();
var details = Model.Details.ToList();
@foreach (var item in requests)
{
     @: html code here
}
@foreach (var item in details)
{
     @: html code here
}