将Linq ObjectQuery IQueryable转换为IEnumerable

时间:2010-12-01 12:17:08

标签: linq

完全混淆了这里所需的数据类型。

我有这个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>'   

我无法找到强制转换为正确类型的语法。有人可以帮忙吗?

干杯, 马特

4 个答案:

答案 0 :(得分:8)

编译时错误显示,feat是“字符串集合的集合”(字面意思是“字符串的IEnumerable的IQueryable”)。所以你需要生成扁平集合。

feat.SelectMany(x => x)

答案 1 :(得分:1)

System.Data.Objects.ObjectQuery<T>System.Linq.IQueryable<T>的实现。但是,您的类型是IEnumerable对象的IQueryable。执行SelectMany,因此您不再拥有字符串集合的集合,而只是字符串的集合。

答案 2 :(得分:0)

你可以使用

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

答案 3 :(得分:0)

根据您需要对列表执行的操作,您可以执行以下操作:

var itemTypes = feat.ToList();