2

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

2 回答 2

1

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

于 2013-09-19T20:47:24.003 回答
1

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

虽然将 List(of T) 分配给 IEnumerable 是有效的,但 IEnumerable 中包含的类型是 Object。这就是为什么你没有智能感知。

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

Dim data = datalayer.GetFoo()

这将导致类型推断,您将获得智能感知。

于 2013-09-19T20:47:39.617 回答