2

Predicate Builder で Linq to Sql を使用しており、データベースから取得する情報の量を最適化しようとしています。特定のフィールドのみを選択して、グリッドビューに表示したいと考えています。必要なものだけを選択すると、追加した検索パラメーター (以下を参照) が機能せず、PredicateBuilder も機能しません。これが私が現在行っていることです(これは機能しますが、情報が多すぎるすべてを取得します)

    ' Initial Setup '
    Dim db As New MyDataContext()
    Dim results = From p In db.Products _
                  Select p

    ' Search '
    If (testCase) Then
        results = results.Where(Function(p) p.SomeAttribute = 123)
    End If

必要なものだけを選択するように変更すると、次のようになります。

    Dim results = From p In db.Products _
                  Select p.Name, p.SomethingElse

次に、情報が選択されている場合 (つまり、p.SomeAttribute を選択した場合)、その属性を検索 (where 句を追加) できることに気付きましたが、そうでない場合は検索できません。また、述語ビルダーを使用すると、アイテム全体を選択した場合 (つまり、p を選択した場合) にのみ機能します。これが行う必要があるのは、検索する属性を選択する必要のない SQL ステートメントを作成することだけです。これを機能させて必要なものだけを選択し、何でも検索して prediate builder を機能させ続けるにはどうすればよいですか? どんな助けでも大歓迎です!ありがとう

4

3 に答える 3

1

述語ビルダー(ブール式を構築する)を使用して「選択リスト」を変更することはできません(これが私があなたの質問を理解した方法です。誤解した可能性があります)。これを行うには、手動で名前空間内のものを使用する必要がありますが、代わりにDynamic LINQSystem.Linq.Expressionsを使用することをお勧めします。

于 2009-08-03T16:57:30.460 に答える
1

最初に「select p」を実行してから、すべてのwhere句を追加し、最後に必要なものだけを選択することができます。

' Initial Setup '
Dim db As New MyDataContext()
Dim results = From p In db.Products _
              Select p

' Search '
If (testCase) Then
    results = results.Where(Function(p) p.SomeAttribute = 123)
End If

' trim down the columns after you've added the wheres...
Dim results2 = from p in results
               Select p.Name, p.SomethingElse
于 2009-08-03T16:58:03.703 に答える
0

元の製品ではなく、投影のどこで行っているように聞こえます。すべての検索基準が適用された後、最後に p.Name, p.SomethingElse を選択します。

于 2009-08-03T16:58:09.133 に答える