Инкремент в запросе LINQ



Здравствуйте у меня есть следующий код, который возвращает мне список типа Listitem. Я хочу увеличить значение на единицу для каждого выбранного Листита.



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


Пожалуйста, помогите мне в этом. Я не могу этого сделать, так как не могу найти способ, как переназначить значение переменной counter после инкремента.



Заранее спасибо

632   2  

2 ответов:

Существует перегрузка 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();
    }
}

Используйте ++Counter вместо ( Counter + 1)

[Обновление]

Попробуйте увеличить счетчик, прежде чем поместить его в Select ():

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();
    }

Comments

    Ничего не найдено.