2

簡単な概要:
Visual Basic 2010 WinForm アプリは DB2 からデータをプルします。アプリを使用すると、ユーザーはデータをフィルター処理できます。

問題:
データセット内のフィールドにアクセスできないため、LINQ クエリ (またはオブジェクト定義) に問題があります。DB2 からのデータのプルは問題ありません。そのデータを取得し、IEnumerable として保存します。

ユーザーの 95% が読み取り専用で、100,000 件以上のレコードにアクセスするため、このアプリを切断して実行する予定です。このため、2 つのデータセットがあります。1) 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) を受け取るだけです。

私が見逃している簡単なことは何ですか?

パフォーマンスも問題ですが、一度に1つの問題を考え出しました...

ありがとう、
ブライアン。

以下に示すように、ここに答えがあります。

データを定義するときは、ジェネリック リスト 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 に答える