在C#列表中重新排列项目

时间:2015-11-13 11:32:55

标签: c# .net web-services

基本上,每当用户点击项目下的任何图片时,我都会尝试返回图片幻灯片的imageURL列表。

我已经处理了一个包含imageID的列表,并且根据projectId,imageid返回了ImageUrl,传入:

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

我想按照以下顺序重新安排返回的列表项:

返回原始列表:&lt; 1Item,2Item,3Item,4Item,5Item&gt;

如果用户已将3作为imageid的参数传递给:

pd.GetProjectImagesByProjectID(projectId, imageid, pageno) 

然后返回的列表应排列为:&lt; 3Item,4Item,5Item,1Item,2ItemIte&gt;。

我已经努力了:

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

简单地交换列表中的项目,如:&lt; 3Item,2Item,1Item,4Item,5Item&gt; - 这不是我要求的。 任何建议或示例代码??

2 个答案:

答案 0 :(得分:1)

这样的东西? Items是原始列表。

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

答案 1 :(得分:0)

好吧,我想你可以使用SkipTake的组合:

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));