【问题标题】:Cannot iterate through two different collections simultaneously c#不能同时遍历两个不同的集合c#
【发布时间】:2015-01-14 13:17:52
【问题描述】:

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

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

我的视图模型:

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

我的循环:

@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 天时间解决这个问题,但找不到任何解决方案,请帮助我。

【问题讨论】:

  • 如果您发布示例输入和所需输出可能会有所帮助。
  • @dav_i 我想同时显示这两个集合的结果,请求和详细信息。
  • @Usama dav_i 询问所需的输出/html 应该是什么,因为您可以非常轻松地运行两个不同的循环(每个列表一个循环)并且仍然可能获得您想要的结果。
  • 它们有什么关系?有没有可以加入的关键价值?还是您只想并排列出它们?
  • @Usama 然后我不会尝试同时循环它们 - 分别循环它们,创建两个不同的 UI 元素(列表?表格?跨度?)并使用样式来并排显示它们 -一边。

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


【解决方案1】:

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

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

您可以直接进行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
}

【讨论】:

    猜你喜欢
    • 2018-12-10
    • 1970-01-01
    • 1970-01-01
    • 2016-11-16
    • 2021-04-23
    • 1970-01-01
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多