快速概述:
Visual Basic 2010 WinForm应用程序从DB2中提取数据。该应用程序允许用户过滤数据。
问题:
我的LINQ查询(或对象定义)出错了,因为我无法访问数据集中的字段。从DB2中提取数据很好,我获取数据并将其存储为IEnumerable。
我计划将此应用程序作为断开连接运行,因为它只读取95%的用户,并且它可以访问100,000多条记录。因此,我有两个数据集:1)'data',它是从DB2中提取的完整数据集(我不打算对它进行任何修改),(2)'filteredData',它是基于数据的子集用户输入过滤器。
Dim data As IEnumerable
Dim dataFiltered = From record in data
Select record
'Filter data based on version
Select case uxCodeVersion.Text
Case "10"
dataFiltered = From rec in dataFiltered
Where rec.
... (other parts of case statement removed)
End Select
这是我的问题。我期待看到'rec'中的字段列表。 (例如rec.CodeVersion);但是,我只接收对象方法(Equals,GetHashCode,GetType,ReferenceEquals,ToString)。
我错过了什么简单的事情?
性能也是一个问题,但我一次只能解决一个问题......
谢谢你,
布莱恩。
以下是答案。
定义数据时,我需要将其定义为通用列表DTO。所以在我的情况下,这变成:
Dim data As IEnumerable(Of DataAccessLayer.DiagnosisAndDiagnosisIndustryCombinedDTO)
然后在访问代码时,它和以前一样,虽然我暂时取出了dataFiltered字段并且只使用了数据。
dataFiltered = From rec in data
Where rec.CodeVersion = uxCodeVersion.Text
答案 0 :(得分:1)
在为IEnumerable分配类型之前,您将无法以这种方式访问字段。例如(c#):IEnumerable<YourType>
应该有效。
答案 1 :(得分:1)
从您的代码示例中,您将数据定义为IEnumerable。根据您的评论,您说您的数据层返回List(T),
虽然List(of T)对IEnumerable的分配是有效的,但IEnumerable中包含的类型是Object。这就是为什么你没有得到intellisense。
您应该声明IEnumerable(T),或者执行以下操作:
Dim data = datalayer.GetFoo()
这会导致类型推断,你会得到智能感知。