2011-10-17 3 views
3

このトピックに関するいくつかの質問が既にありましたが(例えばExpression.Invoke in Entity Framework?)、私の特定の状況については答えが見つかりませんでした。 私はこのようなメソッドを定義したい:Linq to EFの式<Func <Model, bool>>を使用するにはどうすればよいですか?

public IQueryable<Customer> GetCustomers(Expression<Func<Customer, bool>> condition) 
{ 
    return from p in ctx.Customers.AsExpandable() 
     where condition.Compile()(p) 
     select p; 
} 

AsExpandable方法はLinqKit(これは前述のスレッドでadvicedたように)からです。しかし 、私は彼のように私のメソッドを呼び出すようにしてみてください。

var customers = GetCustomers(c => c.ID == 1); 

それはInvalidCastExceptionがスローされます:「システムを入力する

型のオブジェクトをキャストすることができません「System.Linq.Expressions.InstanceMethodCallExpressionN」を.Linq.Expressions.LambdaExpression '。 私は何が間違っていますか?

答えて

5

あなたは式ツリーを使用する場合は、LINQメソッドに式ツリー自体を渡す必要があります:

return ctx.Customers.AsExpandable().Where(condition) 
+0

ありがとう!よく働く。 –

+0

'InvEx'を使用していないので、' AsExpandable'はここでは必要ありません。 – Servy

+0

@DCShannon:Typo;一定。 – SLaks

関連する問題