Skip and take 列表中的方法
Skip and take method in List
我有一个classPlayers
。我想用 Skip
和 Take
方法创建 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 IEnumerable
或 char
并且您需要使用 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 的属性与更具可读性的代码一起使用。
我有一个classPlayers
。我想用 Skip
和 Take
方法创建 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 IEnumerable
或 char
并且您需要使用 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 的属性与更具可读性的代码一起使用。