Skip and take 列表中的方法

Skip and take method in List

我有一个classPlayers。我想用 SkipTake 方法创建 Hyperlink。但是给我 System.Linq.Enumerable 错误。我的目标是制作一个金字塔用户列表。这是我的代码

public class Players
{
    public string Name{ get; set; }
    public int Order{ get; set; }
    public int ID { get; set; }
}



List<Players> playerlist= new List<Players>();
playerlist= (from DataRow dr in dt.Rows
             select new Players()
             {
                 Name= (dr["name"].ToString()),
                 Order= int.Parse(dr["order"].ToString()),
                 ID = int.Parse(dr["Id"].ToString())
             }).ToList();

playerlist= playerlist.OrderBy(x => x.Order).ToList();

int skip = 0;
int take = 1;
int addedCount = 0;

do
{   
    HyperLink links= new HyperLink();
    links.Text = "" + playerlist.Skip(skip ).Take(take).Select(x => x.Name);
    links.NavigateUrl = "playerdetails.aspx?id=" + oyunculistesi.Skip(skip).Take(take).Select(x => x.ID);
    Page.Controls.Add(links);
    addedCount += take ;
    skip+= take ;
    take += +1;
}
while (addedCount < playerlist.Count);

它在 StringBuilder 上工作,但在 HyperLink 上不工作。

sb.AppendLine(string.Join(" ", players.Skip(skip).Take(take).Select(x => $"{x.Order}) {x.Name}")));

您的 Select is returning an IEnumerablechar 并且您需要使用 string.Join 从它们构建一个字符串,就像您在 StringBuilder:

中所做的一样
linkuret.Text = string.Join("" , playerlist.Skip(skip).Take(take).Select(x => x.Name));

我会用这种方式重写你的循环

    int skip = 0;
    while (skip < playerlist.Count)
    {

        HyperLink links= new HyperLink();
        Players p = playerlist.Skip(skip).FirstOrDefault();
        links.Text = $"{p.Name}" 
        links.NavigateUrl = $"playerdetails.aspx?id={p.Id}"
        Page.Controls.Add(links);
        skip++;
    }

首先,我从您的代码中删除了 Take part,并使用 FirstOrDefault 始终获取跳过后的第一个元素。最后,Players 元素仅加载一次,然后我将 class 的属性与更具可读性的代码一起使用。