2017-09-24 67 views
0

我有一個類Players。我想用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); 

它正在與StringBuilderHyperLink沒有。

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

爲什麼不告訴我們收到的確切錯誤信息? – Steve

+0

你從哪裏得到_oyunculistesi_? – Steve

回答

1

Select正在返回的charIEnumerable,你需要使用string.Join就像你在StringBuilder做了什麼,以建立從他們的字符串:

linkuret.Text = string.Join("" , playerlist.Skip(skip).Take(take).Select(x => x.Name)); 
0

我會改寫你的循環以這種方式

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

首先,我已經從您的代碼中刪除了參與部分,並使用FirstOrDefault來g總是跳過後的第一個元素。最後,Players元素只加載一次,然後我用更具可讀性的代碼來使用類的屬性。