2012-04-19 2 views
3

Я пытаюсь перебрать список только для первой половины элементов, а затем снова хочу перебрать список только для оставшейся половины половины списка. Есть идеи ?Итерировать список для первой половины позиции

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

'Пропустите (Model.Categories.Length/2)' –

ответ

3

Что-то вроде:

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 
} 

Если сделать трюк, не может гарантировать, что синтаксис 100%, но это должно дать вам все, что вам нужно сделать это!

0

Возможно, вы можете разбить список на 2 массива и затем запустить цикл по каждому из них по желанию.

+0

Почему раскол? Дополнительная обработка без добавленной стоимости для решения проблемы. – tsells

2

Просто используйте for loop.

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

В первом бите 'for' нет точного упорядочения, поскольку вы просто подсчитываете результат. –

+0

Вы делаете вид дважды там, что не очень эффективно. Сортируйте один раз в переменную и используйте это, чтобы сократить обработку. Особенно, если в списке много элементов. – Tim

+0

@GeorgeDuckett вырезать и вставить меня снова. :П –

1

Я действительно рекомендую толкая эту логику в модель, то просто получить данные, которые уже отформатированный для зрения:

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

Затем на ваш взгляд:

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

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

следующий код работал на моем приложении.

     @{ 
          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> 
Смежные вопросы