2010-05-30 41 views
7

我需要一個查詢的結果:轉換LINQ查詢到的ICollection

var query = from m in db.SoilSamplingSubJobs where m.order_id == id select m; 

,並準備爲ICollection的,這樣我可以在我創建的那一刻有類似

ICollection<SoilSamplingSubJob> subjobs 

列表,這不適合我的需要:

query.ToList(); 

我該怎麼辦 - 是它query.ToIollection()?

+1

任何特別的原因爲標記用'asp.net-mvc'這個問題? – 2010-05-30 19:13:13

回答

14

列表是ICollection。您可以將query.ToList()代碼更改爲以下內容。

query.ToList() as ICollection<SoilSamplingSubJob>; 

你的問題聽起來像這個查詢返回作爲一個函數結果。如果是這種情況,請記住Linq to SQL對象默認連接,因此您需要管理數據庫上下文打開和關閉的位置。或者,您可以創建DTO(數據傳輸對象),以保存要在程序其餘部分中使用的數據。這些對象可以以任何您想要的方式放入對象層次結構中。

您也可以創建這些DTO作爲查詢的一部分。

var query = from m in db.SoilSamplingSubJobs where m.order_id == id 
      select new SubJobDTO { 
       OrderNumber = m.order_id 
      }; 
return query.ToList() as ICollection<SubJobDTO>; 
+0

謝謝傑森!多謝 – bergin 2010-05-30 19:13:14

0

因爲查詢實現了IEnumerable,所以可以將它傳遞給您選擇的集合的構造函數。 ICollection是一個接口,由幾個類實現(包括List<T>,ToList返回),具有不同的性能特徵。

0

略有不同的語法,你可以做這樣的事情也可以削減什麼進入ICollection中。這種類型的方法對角和MVC是偉大的,當你有一個巨大的表,但只希望一些道具加載到頁面CSHTML:

ICollection<SoilSamplingSubJob> samples = dbContext.GetQuery().Where(m => m.order_id == id) 
.AsEnumerable().Select(s => new 
      { 
       Id = s.order_id, 
       CustomProperty = s.some_thing 
      }).ToList() as ICollection<SoilSamplingSubJob>