2011-12-27 12 views
1

私の最終結果は、国のタイプの一般的なリスト(どんな形状も変更することなく)にしたい。どのようなlinqクエリが私にCountryNameが 'C'で始まるCountryNameのすべての国でStateNameが 'S'で始まる上位3州を与えるのですかLINQ INNER SELECT WITH TOP

IE:私の内側のオブジェクトだけでなく外側のオブジェクトでも検索したい私の内部オブジェクトの数をXに制限する

public class Country 
{ 
    public string CountryName { get; set; } 
    public List <State> StateList { get; set; } 
} 

public class State 
{ 
    public string StateName { get; set; } 
} 

答えて

4

Any()を使用して、特定の国の州が「S」で始まるかどうかを確認できます。 Take()は結果の数を制限します。次のクエリでは

あなたがする状態の数を制限(最大)3:

List<Country> result = (from c in countries 
           where c.CountryName.StartsWith("C") && c.StateList.Any(s => s.StateName.StartsWith("S")) 
           select new Country() 
              { 

               CountryName = c.CountryName, 
               StateList = (from s in c.StateList 
                  where s.StateName.StartsWith("S") 
                  select s).Take(3).ToList() 
              }).ToList(); 
+0

が選択新しい必要がありますか?基本的に実際のシナリオでは、私は1850万の内部レコードでこれをやっているので、パフォーマンスについて心配しているだけです – Raj

+0

エンティティフレームワークでエンティティにLinqを使用していますか?その場合は、このシナリオでは、自動更新で変更追跡メカニズムを使用することができます。しかし、正直言って、1850万レコードでは、あなたが使うすべてのオプションには時間がかかるでしょう。 –