Инициализация var в C #

2

Рассмотрим ниже код:

public IEnumerable <Country> ListPopulation()
{
    foreach(var continent in Continents)
    {
        var ids = context.continentTable
                   .where(y=>y.Name == continent.name)
                   .select(x=>x.countryId);

    }

    return GetPopulation(ids);// ids is not available here
}

Public IEnumerable<Country>GetPopulation(IQueryable<int> idnumbers)
{

}

Как я могу инициализировать var ids, чтобы я мог использовать его для вызова GetPopulation()?

Теги:
linq
winforms
var

3 ответа

5

Ну, основная проблема не имеет ничего общего с использованием "var". У вас есть цикл foreach с объявленной в нем переменной, а затем вы пытаетесь вернуться извне цикла, используя эту переменную. Что вы ожидаете от значения?

Если вы пытаетесь выбрать все страны, почему бы вам просто не сделать это:

public IEnumerable <Country> ListPopulation()
{
    return GetPopulation(context.continentTable.Select(x => x.countryId));
}

Какая точка итерации через каждый из континентов? Или существуют ли в континенте страны, на которые не ссылается свойство континентов, которое вы не указали?

2

Вероятно, вам следует следовать рекомендациям Джона Скита или Ника Берарди и просто сформулировать лучший запрос, но если у вас действительно есть веские причины для этого, вот ответ на ваш реальный вопрос:

Чтобы иметь доступ к идентификаторам переменных после того, как вы покинули область цикла, вы должны объявить ее снаружи. Но вы не можете использовать ключевое слово var, если вы не назначаете эту переменную при ее объявлении. Поэтому вы должны явно объявить тип:

public IEnumerable <Country> ListPopulation()
{
  IQueryable<Country> ids;
  foreach(var continent in Continents)
  {
    var ids = context.continentTable
              .Where(y=>y.Name == continent.Name)
              .Select(x=>x.countryId);
  }

  return GetPopulation(ids);
}
2

Я думаю, что вы используете LINQ не оптимальным способом

var ids = from c in context.continetTable
          select c.countryId

И затем найдите на основе этих идентификаторов, однако я не знаю ваш datamodel, но если ваш контент и таблица стран связаны, было бы легче сделать это.

public IEnumerable <Country> ListPopulation()
{
    return from c in context.contentTable
           select c.Country;
}

Если свойство Country является свойством, основанным на значении CountryId.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню