3 votes

Itérer une liste pour la première moitié du nombre d'éléments.

J'essaie d'itérer une liste pour seulement la première moitié des éléments, et ensuite je veux itérer une liste pour seulement l'autre moitié restante de la liste. Une idée ?

@foreach (var category in Model.Categories.OrderBy(i => i.CategoryName))
{
  <li>
    <div id="category_@(category.SKU)" 
         class="itemBlock" 
         onclick="toggle('@(category.SKU)')">
  </li>
}

3voto

Tim Points 3729

Quelque chose comme :

var categories = Model.Categories.OrderBy(i => i.CategoryName).ToList();
int noOfCategories = categories.Count();
int half = noOfCategories/2;

for (int x = 0; x < half; x++)
{
    var category = categories[x];
    //your logic here
}
for (int x = half; x < noOfCategories; x++)
{
    var category = categories[x];
    //your logic here
}

Cela devrait faire l'affaire, je ne peux pas garantir que la syntaxe soit à 100%, mais cela devrait vous donner tout ce dont vous avez besoin pour le faire !

2voto

Joshua Drake Points 1460

Il suffit d'utiliser un pour la boucle .

for(int i=0; i < Model.Categories.OrderBy(i => i.CategoryName).Count/2; i++)
{
    // do stuff
}

for(int i=Model.Categories.OrderBy(i => i.CategoryName).Count/2; i < Model.Categories.OrderBy(i => i.CategoryName).Count; i++)
{
    // do different stuff
}

1voto

viperguynaz Points 4702

Je recommande vraiment de pousser cette logique dans votre modèle, puis de récupérer les données déjà formatées pour la vue :

[Serializable]
public class YourModel
{
    private int _mid
    {
        get { Categories.Count / 2; }
    }
    private int _top
    {
        get { Categories.Count - _mid; }
    }
    public List<Category> CategoriesLowerHalf
    {
        get { Categories.OrderBy(i => i.CategoryName).Take(_mid); }
    }
    public List<Category> CategoriesUpperHalf
    {
        get { Categories.OrderBy(i => i.CategoryName).GetRange(_mid, _top); }
    }
    // rest of your model
}

Alors, à votre avis :

@foreach (var category in Model.CategoriesLowerHalf)
{
   <li>
      <div id="category_@(category.SKU)" class="itemBlock" onclick="toggle('@(category.SKU)')">category.Name</div>
   </li>
 }

@foreach (var category in Model.CategoriesUpperHalf)
{
   <li>
      <div id="category_@(category.SKU)" class="itemBlock" onclick="toggle('@(category.SKU)')">category.Name</div>
   </li>
 }

0voto

walmik Points 705

Vous pouvez peut-être diviser la liste en deux tableaux et exécuter une boucle sur chacun d'eux comme vous le souhaitez.

0voto

Uğur Sarak Points 13

le code suivant a fonctionné sur mon application.

                      @{
                            int a = 0;
                            int b = 0;
                        }

                   <li>
                        @foreach (var item in Model.NameHere)
                        {
                           //write code here
                            a++;
                            if (a == Model.Offices.Count() / 2)
                            {
                                break;
                            }
                        }
                    </li>

                    <li>
                        @foreach (var item in Model.NameHere)
                        {

                            if (b >= Model.Offices.Count() / 2)
                            {
                                //write code here
                            }
                            b++;
                        }
                    </li>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X