1

私は次の方法を使用しています:

public PageOfList<ConsaltQuestion> Filter(int? type, int pageId, EntityCollection<ConsaltCost> ConsaltRoles)
    {
       // return _dataContext.ConsaltQuestion.Where((o => o.Type == type || type == null) && (o=>o.Paid == paid));
        return (from i in _dataContext.ConsaltQuestion where ((i.Type == type || type == null) && (i.Paid == true) && (ConsaltRoles.Contains(ConsaltCostDetails(i.Type.Value)))) select i).ToList().ToPageOfList(pageId, 20);
    }

エラーを返します:

LINQ to Entities does not recognize the method 'Boolean Contains(mrhome.Models.ConsaltCost)' method, and this method cannot be translated into a store expression.

どうすれば修正できますか?

4

2 に答える 2

2

Linq to Entitiesは、Containsメソッドをサポートしていません。この場合、メモリ内オブジェクト(Linq-to-Objects)を使用してContainsフィルターロジックを使用することを検討する必要があります。パフォーマンス上の理由で実行可能なオプションではない場合は、containsを実行するストアドプロシージャを作成してから、エンティティモデルにマップすることをお勧めします。

次のURLは、サポートされているクエリ演算子http://msdn.microsoft.com/en-us/library/bb738550.aspxを示しています。

于 2010-05-19T10:36:24.347 に答える
-1

EntityFrameworkのバージョン1はContainsをサポートしていません。バージョン4は可能ですが、アップグレードが不可能な場合は、式ツリーを構築して複製できます。

ここにいくつかのサンプルコードを含む良い記事があります:http://blogs.msdn.com/alexj/archive/2009/03/26/tip-8-writing-where-in-style-queries-using-linq-to -entities.aspx

于 2010-05-19T12:41:34.133 に答える