2011-12-27 120 views
1

我希望我的最終結果是類型Country的通用列表(不更改任何形狀)。我會寫什麼linq查詢給我前3名StateName以'S'開頭的所有國家/地區的國家/地區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

你可以用任何(),以檢查是否有任何一個特定國家的州與「S」開頭。 Take()讓您限制結果的數量。

用下面的查詢你的極限狀態的要數(最大值)三:

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 2011-12-27 14:40:59

+0

您是否正在使用Linq to Entities with Entity Framework?如果是這樣,您可以使用具有自動修復功能的變更追蹤機制來處理這種情況。但說實話,在1850萬條記錄中,您使用的每個選項都需要一些時間。 – 2011-12-27 14:43:16