2012-06-04 73 views
0

我有以下LINQ聲明:LINQ得到收集匿名類型

var query =(from item in _itemRepository.FindAll() 
      where item.Id == "20649458" 
       from singelitem in item.ListOfChildren 
       where singelitem.Property == "singelitem" 
       from manyitems in item.ListOfChildren 
       where manyitems.Property == "many" 
       select new 
          { 
           item.Id, 
           singelitem, 
           manyitems 
          }); 
var result = query.ToList(); 

任務是對象的集合,並在where子句集合中 tasks.Property == "something"比賽幾個項目,但是當我使用匿名類型在select中,我只取回一個項目(第一個)的匹配結果,而不是任務集合。我怎樣才能找回集合中的所有匹配任務?

編輯: 真正happends的是,我得到平坦的對象,(就像從連接語句設置一個數據庫的結果)。

+1

使用'ToList();'擴展方法來實現結果集合。 – MarcinJuraszek

回答

3

當您不使用匿名類型時,您正在處理實體類,它在您訪問它們時懶惰地加載任務。如果要使用結果加載任務,請嘗試使用包含方法來加載子項。見How do you construct a LINQ to Entities query to load child objects directly, instead of calling a Reference property or Load()

+0

這並不重要,因爲它的任務,我想成爲一個列表。我想要一個項目(結果)與任務列表.. – randoms

+0

@randoms看到更新的答案 –

+0

謝謝哈桑:) – randoms

0

這是Linq的正確行爲。實際上你所期待的是不可能的。你期待一個項目匹配item.Id ==「123」;如果不止一個呢?它只是爲每個匹配的項目創建一個匿名項目。試想把第一個「從......」改爲第二個;你會期待什麼?

另外,第一個「from」語句和第二個語句之間沒有關係,這使得這個查詢有點「奇怪」。爲什麼不把查詢分解爲2;並創建一個具有所需屬性的新對象?