2009-08-03 14 views
2

私は述語ビルダーでLINQ to SQLのを使用していますし、データベースから取得される情報の量を最適化しようとしています。グリッドビューで表示する特定のフィールドだけを選択したいと思います。私は私が欲しいものだけを選択すると、検索パラメータは、私は動作しません(下記参照)を追加し、どちらもPredicateBuilderは行いません。私は唯一の私が必要なものを選択することに変更した場合はここでは、このように、LINQの - のみ(述語ビルダ/ w)の特定の情報を選択し

' 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 

(動作するが、あまりにも多くの情報ですEVERYTHINGを取得します)私は現在やっているものだ

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

その後、情報が選択されている場合、私は、私はその属性上で(where句を追加)を検索することができますが、そのない場合は、私はできません(つまり、私はp.SomeAttributeを選択)気づきました。そして述語ビルダーでは、アイテム全体(つまりpを選択)を選択した場合にのみ機能します。これで済むのは、検索する属性を選択する必要のないSQL文を作成することだけです。どのように私はこれを動作させ、必要なものだけを選択することができますが、何かを検索してprediateビルダーを動作させますか?どんな助けでも助けてください!おかげ

答えて

1

すべての条項を追加し、先頭に「Pを選択」、そして一番最後に、あなたはそれから必要なものだけを選択します。あなたは、投影上の場所ではなく、元の製品をやっているよう

' 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 
+0

こんにちは、これを実際に試してみましたが、このエラーが発生しました。 'System.Data.Linq.DataQuery'1型のオブジェクトをキャストすることができません[VB $ AnonymousType_0'3 [System.Int32、System.Int32、System .String] System.Linq.IQueryable'1 [MyNamespace.Product] '」を入力します'。 その1つの周りの任意のアイデア? – Ryan

+0

私の例では、そのエラーを起こすバグがありました。私はそれを修正するための例をアップロードしました。 –

+0

私はそれをコメントした後、私はそれを得た、申し訳ありません。しかし、あなたのソリューションはまさに私が探していたものです。ありがとう! 型「System.Data.Linqのオブジェクトをキャストすることができません: – Ryan

1

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

0

が鳴ります。投影を行うすべての検索条件が適用されたら、最後にp.Name、p.SomethingElseを選択します。

+0

ねえ、私はあなたが私はそれを検索した後にすべてのものを選択するために、(その上の答えのような場合は)言っている、と私はこのエラーを取得する何を考えてみました。 DataQuery'1 [VB $ AnonymousType_0'3 [可能System.Int32、可能System.Int32は、可能System.String]] System.Linq.IQueryable'1 [MyNamespace.Product] '」と入力します'。あなたはそれを回避する方法を知っていますか? – Ryan

関連する問題