Инкремент в запросе 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 после инкремента.
Заранее спасибо
2 ответов:
Существует перегрузка
Select, которая также обеспечивает индекс текущего элемента. Вы можете использовать это. Однако большинство поставщиков запросов к БД не поддерживают его, поэтому вам нужно выполнить запрос к БД, а затем убедиться, что перегрузкаEnumerableSelectвызывается для добавления индекса: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