为什么我不能在WhereSelectEnumerableIterator(Of T,String)上调用ToList

时间:2017-08-30 13:15:56

标签: vb.net linq

我正在尝试使用linq从一组项中提取值。该字段可能不存在,或者它是空的,因此我希望按非空且不为空的字段进行过滤。字段值是数字类型,我想将它们投影到字符串。此查询的回报是WhereSelectEnumerableIterator(Of NestedTableItem, String)编辑:看起来这是适当的返回类型。 我很难理解为什么这仍然会在字符串旁边投射NestedTableItem最后我想在查询上调用ToList,但是我得到一个异常,即在该类型上找不到ToList。

.NET版本:4.5.1

参考文献: Microsoft.VisualBasicSystemSystem.CoreSystem.IOSystem.LinqSystem.RuntimeSystem.XmlSystem.Xml.Linq

进口: Imports SystemImports System.TextImports System.Collections.GenericImports System.LinqImports System.Runtime.CompilerServicesImports System.XmlImports System.IO

Dim aasItems As IEnumerable(Of NestedTableItem) = aasTable.NestedTableItems
Dim query = From item In aasItems
            Let field = item.AllFields.ValueFields.Find("AASProposedTotalMinCreditHours")
            Where field IsNot Nothing AndAlso Not field.IsEmpty
            Select New String(field.Numeric9Value.ToString())
Dim aasMinStringList = query.ToList()

特定的异常消息:

Public member 'ToList' on type 'WhereSelectEnumerableIterator(Of NestedTableItem,String)' not found.

提前致谢!

编辑:更新了标题以更好地匹配问题。

1 个答案:

答案 0 :(得分:0)

我能够通过将查询转换为IEnumerable(Of String)来解决这个问题。

Dim aasItems As IEnumerable(Of NestedTableItem) = aasTable.NestedTableItems
Dim query As IEnumerable(Of String) = _ 
            From item In aasItems
            Let field = item.AllFields.ValueFields.Find("AASProposedTotalMinCreditHours")
            Where field IsNot Nothing AndAlso Not field.IsEmpty
            Select New String(field.Numeric9Value.ToString())
Dim aasMinStringList = query.ToList()

我仍然不确定为什么原始代码不起作用。如果有人有任何见解,我会更加理解。