2014-01-20 84 views
3

你好,我有下面的代碼,它返回我Listitem類型的列表。我想爲每個ListItem選擇增加一個值。在LINQ查詢中增加

public static List<System.Web.UI.WebControls.ListItem> GetMyCompassTUTListContent(List<int> ContentID, Int32 CountryID) 
{ 
    int Counter = 0; 
    List<System.Web.UI.WebControls.ListItem> litems = new List<System.Web.UI.WebControls.ListItem>(); 
    using (DbDataContext objContext = new DbDataContext()) 
    { 
     if (CountryID == (int)MyCompassBLL.Constants.Country.Australia) 
     { 
      litems = objContext.Contents.Where(x => ContentID.Contains(x.ID)).Select(x => new System.Web.UI.WebControls.ListItem { Text = x.Text, y = (y + 1) }).ToList(); 
     } 
     else 
     { 
      litems = objContext.ContentCountries.Where(x => ContentID.Contains(x.ContentID) && x.CountryID == CountryID).Select(x => new System.Web.UI.WebControls.ListItem { Text = x.Text, Value = (Counter + 1).ToString() }).ToList(); 
     } 
    } 
    return litems; 
} 

請幫我這個。我無法做到這一點,因爲我無法找到如何在增量後重新賦值給變量計數器的方法。

預先感謝

+0

你沒有t在任何地方遞增'Counter'的值,您只需將'1 + Counter'的值賦給'Value'。 –

+0

@PrestonGuillot這是我需要幫助的地區。我無法知道如何將該值分配給變量 – user3167910

+0

請參閱@Servy的答案 - 您需要採取在數據庫訪問之外增加計數器的操作。他建議使用包含當前索引的「Select」過載是比使用其他答案中建議的增量操作符更符合慣用的LINQ。 –

回答

6

有的Select過載,它也提供當前項的索引。你可以使用它。然而,大多數數據庫查詢供應商不支持它,所以你需要做你的數據庫查詢,然後確保SelectEnumerable過載被稱爲添加索引:

public static List<ListItem> GetMyCompassTUTListContent(
    List<int> ContentID, Int32 CountryID) 
{ 
    //Note this is IEnumerable, not IQueryable, this is important. 
    IEnumerable<string> query; 
    using (DbDataContext objContext = new DbDataContext()) 
    { 

     if (CountryID == (int)MyCompassBLL.Constants.Country.Australia) 
     { 
      query = objContext.Contents.Where(x => ContentID.Contains(x.ID)) 
       .Select(x => x.Text); 
     } 
     else 
     { 
      query = objContext.ContentCountries 
       .Where(x => ContentID.Contains(x.ContentID) 
        && x.CountryID == CountryID) 
       .Select(x => x.Text); 
     } 
     return query.Select((text, index) => new ListItem 
     { 
      Text = text, 
      Value = (index + 1).ToString(), 
     }) 
     .ToList(); 
    } 
} 
+0

謝謝@Servy。你拯救了我的一天。 – user3167910

-1

使用++Counter,而不是(Counter + 1)

[更新]

儘量增加你的櫃檯前,把它放到選擇():

else 
    { 
     Counter++; 
     litems = objContext.ContentCountries.Where(x => ContentID.Contains(x.ContentID) && x.CountryID == CountryID).Select(x => new System.Web.UI.WebControls.ListItem { Text = x.Text, Value = Counter.ToString() }).ToList(); 
    } 
+0

查詢提供程序將無法將其轉換爲SQL。 – Servy