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プロパティによって参照されていない国がcontinentTableにありますか?

于 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 に答える