如何批量从namevaluecollection中获取n个条目

时间:2018-03-10 11:18:08

标签: c# asp.net

使用C#

所以我有一个namevaluecollection,可以包含一般数量为40-50的可变数量的条目。

我想要做的是一次取3个条目并按顺序处理它们。对于例如如果整个集合= 9,那么就像1-3,然后4-6,然后7-9。

问题是我无法递归地获取它们,如果我说13个条目会发生什么,那么它就像3 * 4 + 1。

我尝试使用.TAKE,但不知道如何以递归方式执行此操作。

任何指示赞赏。

int TotalTestImage = TestImages.Count();
int y = 0;

int Interator = TotalTestImage / 3;

if((TotalTestImage % 3) != 0)
{
    Interator += 1;
}

int i = 0;

for(int k = 0; k < Interator; k++)
{
    sb.AppendLine("<div class=\"row\">");

    TestImages.Take(3).Skip(y * 3).ToList().ForEach( o => {
        switch (o.Key)
        {
            case "CaseID":
                CaseID = Convert.ToInt16(o.Value);
                break;
            default:
                i += 1;
                Controls = GetDropDown(o.Value);
                ActualValues.Add(o.Value);
                sb.AppendLine("<div class=\"col-md-3\">");
                sb.AppendLine("<div class=\"box box-success box-solid\">");
                sb.AppendLine("<div class=\"box-header with-border\">");
                sb.AppendFormat("<h3 class=\"box-title\">Question {0}</h3>", i);
                sb.AppendLine("<div class=\"box-tools pull-right\">");
                sb.AppendLine("<button type = \"button\" class=\"btn btn-box-tool\" data-widget=\"collapse\">");
                sb.AppendLine("<i class=\"fa fa-minus\"></i>");
                sb.AppendLine("</button>");
                sb.AppendLine("</div>");
                sb.AppendLine("</div>");
                sb.AppendLine("<div class=\"box-body\">");
                sb.AppendLine("<div class=\"row\">");
                sb.AppendLine("<div class=\"col-lg-9\">");
                sb.AppendFormat("<img src =\"{0}\" alt=\"\" class=\"center-block\">", o.Key);
                sb.AppendLine("</div>");
                sb.AppendLine("<div class=\"col-lg-3\">");
                sb.AppendLine(Controls[1]);
                sb.AppendLine("</div>");
                sb.AppendLine("</div>");
                sb.AppendLine("<div class=\"row\" style=\"margin-top:10px\">");
                sb.AppendLine("<div class=\"col-lg-9\">");
                sb.AppendLine(Controls[0]);
                sb.AppendLine("</div>");
                sb.AppendLine("<div class=\"col-lg-3\"></div>");
                sb.AppendLine("</div>");
                sb.AppendLine("</div>");
                sb.AppendLine("</div>");
                sb.AppendLine("</div>");
                break;
        }
    });
    sb.AppendLine("</div>");
    y += 1;
}

2 个答案:

答案 0 :(得分:0)

当你对第二项使用Take()时,你应该跳过第一项。

在您的示例中,

var set1 = collection.Take(3);  // will get first 3 items
var set2 = collection.Skip(3).Take(3);  // will get first 4-6 items
.
.
.

答案 1 :(得分:-1)

您可以使用.Take.Skip组合

按顺序执行此操作
var batchSize = 3;
var sequence = TestImages; //Uncertain what type is in TestImages
while(sequence.Any()) {
    sb.AppendLine("<div class=\"row\">");

    var batch = sequence.Take(batchSize);

    //process the batch
    processBatch(sb, batch);

    sb.AppendLine("</div>");

    sequence = sequence.Skip(batchSize);
}

processBatch函数基本上与您在ForEach

中所做的相匹配
void processBatch(StringBuilder sb, IEnumerabl<{TypeHere}> batch) {
    foreach(var o in batch) {
        switch (o.Key) {
            case "CaseID":
                CaseID = Convert.ToInt16(o.Value);
                break;
            default:
                i += 1;
                Controls = GetDropDown(o.Value);
                ActualValues.Add(o.Value);
                sb.AppendLine("<div class=\"col-md-3\">");
                sb.AppendLine("<div class=\"box box-success box-solid\">");
                sb.AppendLine("<div class=\"box-header with-border\">");
                sb.AppendFormat("<h3 class=\"box-title\">Question {0}</h3>", i);
                sb.AppendLine("<div class=\"box-tools pull-right\">");
                sb.AppendLine("<button type = \"button\" class=\"btn btn-box-tool\" data-widget=\"collapse\">");
                sb.AppendLine("<i class=\"fa fa-minus\"></i>");
                sb.AppendLine("</button>");
                sb.AppendLine("</div>");
                sb.AppendLine("</div>");
                sb.AppendLine("<div class=\"box-body\">");
                sb.AppendLine("<div class=\"row\">");
                sb.AppendLine("<div class=\"col-lg-9\">");
                sb.AppendFormat("<img src =\"{0}\" alt=\"\" class=\"center-block\">", o.Key);
                sb.AppendLine("</div>");
                sb.AppendLine("<div class=\"col-lg-3\">");
                sb.AppendLine(Controls[1]);
                sb.AppendLine("</div>");
                sb.AppendLine("</div>");
                sb.AppendLine("<div class=\"row\" style=\"margin-top:10px\">");
                sb.AppendLine("<div class=\"col-lg-9\">");
                sb.AppendLine(Controls[0]);
                sb.AppendLine("</div>");
                sb.AppendLine("<div class=\"col-lg-3\"></div>");
                sb.AppendLine("</div>");
                sb.AppendLine("</div>");
                sb.AppendLine("</div>");
                sb.AppendLine("</div>");
                break;
        }
    }
}