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

4

3 回答 3

5

好吧,主要问题与使用“var”无关。您有一个 foreach 循环,其中声明了变量,然后您尝试使用该变量从循环外部返回。你期望的价值是多少?

如果您尝试选择所有国家/地区,为什么不这样做:

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

遍历每个大陆有什么意义?或者您未显示的 Continents 属性未引用 continents 中的国家/地区?

于 2009-01-27T18:21:03.097 回答
2

我认为您以非最佳方式使用 LINQ

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

然后根据这些 id 查找,但是我不知道您的数据模型,但如果您的内容和国家/地区表是链接的,这样做会更容易。

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

属性 Country 是基于 CountryId 值的属性。

于 2009-01-27T18:25:26.987 回答
2

您可能应该遵循 Jon Skeet 或 Nick Berardi 的建议并制定更好的查询,但如果您确实有充分的理由这样做,这里是您实际问题的答案:

为了能够在离开循环范围后访问变量ids,您必须在外部声明它。但是你不能使用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);
}
于 2009-01-27T20:03:15.543 回答