LINQ查询增量

use*_*910 3 c# linq asp.net linq-to-sql

您好我有以下代码返回我Listitem类型列表.我想为每个ListItem Selected增加一个值.

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;
}
Run Code Online (Sandbox Code Playgroud)

请帮帮我.我无法做到这一点,因为我无法找到如何在增量后将值重新赋值给变量计数器的方法.

提前致谢

Ser*_*rvy 6

有一个重载Select,它还提供当前项的索引.你可以用它.但是,大多数数据库查询提供程序都不支持它,因此您需要执行数据库查询,然后确保调用Enumerable重载Select以添加索引:

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();
    }
}
Run Code Online (Sandbox Code Playgroud)