无法从LINQ查询中提取字段

时间:2013-09-19 15:00:05

标签: vb.net winforms visual-studio-2010 linq

快速概述:
  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

2 个答案:

答案 0 :(得分:1)

在为IEnumerable分配类型之前,您将无法以这种方式访问​​字段。例如(c#):IEnumerable<YourType>应该有效。

答案 1 :(得分:1)

从您的代码示例中,您将数据定义为IEnumerable。根据您的评论,您说您的数据层返回List(T),

虽然List(of T)对IEnumerable的分配是有效的,但IEnumerable中包含的类型是Object。这就是为什么你没有得到intellisense。

您应该声明IEnumerable(T),或者执行以下操作:

Dim data = datalayer.GetFoo()

这会导致类型推断,你会得到智能感知。