2015-11-13 4 views
0

В принципе, я пытаюсь вернуть список imageURL для слайд-шоу изображений, когда пользователь нажимает на любое изображение в проекте.Re-Arrange items В C#

Я работал ДО список, который содержит ImageID и ImageUrl возвращается в соответствии с ProjectID, ImageID, прошел в:

List<ProjectImageBO> pi = pd.GetProjectImagesByProjectID(projectId, imageid, pageno); 

Я хочу переставить возвращенные элементы списка в порядке что-то вроде этого:

первоначальный список вернулся: < 1шт, 2Item, 3Item, 4Item, 5Item>

если пользователь прошел 3 в качестве параметра для ImageID в:

pd.GetProjectImagesByProjectID(projectId, imageid, pageno) 

тогда возвращаемый список должен быть следующим: < 3Item, 4Item, 5Item, 1Item, 2ItemIte>.

Я работал до:

public List<ProjectImageBO> GetListOfImagesByProjectPagination(int projectId, int imageid, int pageno) 
    { 
     ProjectImageDAL pd = new ProjectImageDAL(); 
     List<ProjectImageBO> pi = pd.GetProjectImagesByProjectID(projectId, imageid, pageno); 
     if (imageid != 0) 
     { 
      var index = pi.FindIndex(x => x.ImageID == imageid); 
      if (index != null) 
      { 
       if (index > 0) 
       { 
        var item = pi[index]; 
        pi[index] = pi[0]; 
        pi[0] = item; 
       } 
      } 
     }   
     return pi; 
    } 

который просто обменивая элементы в списке, как: < 3Item, 2Item, 1шт, 4Item, 5Item> - что не то, что я требую. Любые предложения или пример кода?

+1

Он делает то, что вы пишете. 'var item = pi [index]; pi [index] = pi [0]; pi [0] = item; 'является свопом. –

+0

да, что я выяснил .... Но любое предложение получить желаемый результат –

ответ

1

Что-то вроде этого? Элементы - это исходный список.

int idx = 2; 
return items.Skip(idx).Union(items.Take(idx)).ToList(); 
+0

Спасибо .... Это решило мою проблему .... –

+0

Я бы предложил использовать Concat вместо Union, так как Union исключает дубликаты, что а не то, что вы хотите здесь, а также добавляет небольшое снижение производительности. – csgero

0

Ну, я думаю, вы можете использовать комбинацию Skip и Take:

var result = new List<ProjectImageBO>(); 
var tmp = // get the whole list before 
// get the last three items: 
result.AddRange(tmp.Skip(imageID - 1)); 
// get the first two items 
result.AddRange(tmp.Take(imageID - 1));