2010-12-01 74 views
5

完全混淆了這裏所需的數據類型。將Linq ObjectQuery IQueryable轉換爲IEnumerable

我有這樣的LINQ聲明:

   var feat = AllCustomers 
        .Select(c => c.CustomerServices.SelectMany(cs => cs.CustomerServiceFeatures) 
        .SelectMany(csf => csf.ConfigElements).Where(ce => ce.Name == "ItemType").Select(ce => ce.Value).Distinct()); 

它返回所需的數據,並VS告訴我,類型被設定爲:

System.Data.Objects.ObjectQuery<System.Collections.Generic.IEnumerable<string>> 

但是我想這個數據添加到字符串列表:

List<string> itemTypes = new List<string>(); 
itemTypes.AddRange(feat); 

但是,這將引發一個錯誤:

Argument 1: cannot convert from 'System.Linq.IQueryable<System.Collections.Generic.IEnumerable<string>>' to 'System.Collections.Generic.IEnumerable<string>' 

我無法找到所需的語法來轉換爲正確的類型。誰能幫忙?

乾杯, 馬特

回答

8

編譯時錯誤顯示, feat是「字符串集合的集合」(字面意思是「IEnumerable of string」的IQueryable)。所以你需要生成平面集合。

feat.SelectMany(x => x) 
+1

答案在整個這段時間裏,我一直在面對着我,我正在嘗試各種各樣的SelectMany()技巧,除此之外。另外..這個答案是非常困難的谷歌! – 2012-02-13 21:08:25

0

可以使用

List<string> list = feat.ToList<string>() 
+0

我沒有downvote你,但這是行不通的。你需要SelectMany()來壓扁集合。 – Rap 2013-09-19 17:11:30

0

根據您需要的名單做什麼,你可以這樣做:

var itemTypes = feat.ToList(); 
1

System.Data.Objects.ObjectQuery<T>System.Linq.IQueryable<T>的執行。但是,您的類型是IEnumerable對象的IQueryable。執行一個SelectMany,所以你不再有一個字符串集合的集合,而只是一個字符串的集合。

相關問題