1

1 つの LINQ クエリの結果を LINQ クエリの次の部分のパラメーターとして使用しようとしていますが、すべてを 1 つの全体的なクエリ内に保持しようとしています。

たとえば、私の(動作していない)コードは次のようになります

List<Categories> myCats = (from city in myCities
    where city.CityName == myCityName
    select city
    from ids in city.IDs
    where ids != 4
    select ids).ToList();

これは、この方法で実行される次のクエリの開始となる結果をフィードできますか?可能であれば、これを機能させるために何が欠けていますか?

city.IDs は int 配列です

4

1 に答える 1

1

実際に新しいプロジェクションを作成しようとしている場合を除きselect、最後まで a の使用を避けることができます。

List<Categories> myCats = (from city in myCities
    where city.CityName == myCityName
    //select city 
    from ids in city.IDs
    where ids != 4
    select ids).ToList();

個人的には、クエリを細かく分割するのが好きです。

var matchingCities = from city in myCities
    where city.CityName == myCityName
    select city;

var matchingCityIds = (from city in matchingCities
    from id in city.IDs
    select id).ToList();

このアプローチには、主に次の 2 つの利点があります。

  1. 変数名は自動的に「ドキュメント」を提供し、他の開発者が各変換の意図を確認できるようにします。
  2. 各変換をステップ オーバーして、必要な結果が得られたことを確認できるため、デバッグが容易になります。

ただし、ある選択を別の選択に従う必要がある場合は、intoキーワードを使用してクエリを連鎖させることができます。

List<Categories> myCats = (from city in myCities
    where city.CityName == myCityName
    // Not typically recommended
    select city.IDs into cityIDs
    from id in cityIDs
    where id != 4
    select id).ToList();
于 2013-10-15T22:33:15.983 に答える