2011-07-21 14 views
0

私は、次のコードを持っている:Func(Of Type、Boolean)をExpression(Of Func(Of Type、Boolean))に変換しますか?

Dim query As IQueryable(Of someObject) = 
    New ObjectQuery(Of someObject)(queryString, db, MergeOption.NoTracking) 
     .Where(CType(Function(x) x.Publish = True, 
        Expression(Of Func(Of someObject, Boolean)))) 

をそして、それは私に言うエラーを与える:

に( ブールの)タイプのFunc(SomeObjectの)可能System.Nullableの表現を変換できません。 System.Linq.Expressions.Expression(Of )System.Func(someObject、Boolean))を入力します。

私も試してみました:

のいずれかに動作しません
.Where(CType(Function(x) x.Publish = True, 
        Expression(Of Func(Of someObject, Nullable(Of Boolean))))) 

を。

私がCTypeを持っていない場合、私のwhereは、IQueryableとIEnumerableからの変換エラーが狭くなるので、そこに必要ですが、どのように書くべきかわかりません変換される。どんな助け?

+0

はパブリッシュの型(x.Publish)です。Nullableブール値?もしそうなら、あなたはExpressionをこれのように見えるように変更する必要があります。式(Of someObject、System.Nullable(Of Boolean)))... –

+0

@Brian Dishaw、いいえnullableブール値ではありません。あなたが提案したことを試してみましたが、最後のものPartでは、Booleanの代わりにNullable(Of Boolean)と表示されます。 – SventoryMang

答えて

1

はここCTypeとキャストを使用しないでください - 直接式を作成します。

Dim expr As Expression(Of Func(Of someObject, Nullable(Of Boolean))) = 
    Function(x) x.Publish = True 

Dim query As IQueryable(Of someObject) = 
    New ObjectQuery(Of someObject)(queryString, db, MergeOption.NoTracking) 
     .Where(expr) 

式のような作成する必要があります。既存のFuncを式に変換することはできません。

+0

@A。とにかくそれを書いて、私がすべてを.Whereの中に入れることができるようにするには、追加の変数を宣言する必要はありませんか? – SventoryMang

+1

私はVB.NETの専門家ではないので、自分で試してみましたが、あなたのバージョンの 'CType'とインライン' expr'の両方で動作します。したがって、問題は別の場所になければなりません。 'someObject'定義を表示できますか? – NOtherDev

+0

@A。うん、これは私のために働いた、私はちょうどそれをすべてに持っていたかった。私が試したときに、あなたのツール - >オプション - >プロジェクトとソリューション - > VBのデフォルトオプションのように見える?このコードでランタイムやコンパイルのエラーが発生することはありませんが(Ctypeなしで関数を書くだけですが)、それでも下線やその他のものとして表示されます。オブジェクトは問題ではなく、Entity Frameworkによってdbから生成されます。 – SventoryMang

関連する問題