完全混淆了这里所需的数据类型。
我有这个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>'
我无法找到强制转换为正确类型的语法。有人可以帮忙吗?
干杯, 马特
答案 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();