2016-08-03 1 views
1

私は、mysqlでエンティティフレームワークを使用しています。クエリの1つでIntersectを使用する必要がありますが、エラー "指定されたメソッドはサポートされていません。"がスローされます。誰もがデータをメモリに取り込み、その上でIntersectを適用する以外の方法を提案することはできますか?linqのメソッドが交差しているか、または除外されています

public List<share> GetFeed(List<long> UserRules, List<long> ListedShares, string AuthorID) 
{ 
    List<share> listshare = DbContext 
     .shares 
     .Where(x => UserRules.Intersect(x.share_rules.Select(y => y.rule_id)).Any()) 
     .ToList(); 
    return listshare; 
} 
+0

raw MySQLクエリを提供できますか? –

+0

デバッグ中にraw SQLクエリを取得できません: "コマンド定義の準備中にエラーが発生しました。詳細は内部例外を参照してください。" –

+0

実行しようとしている実際のMySQLクエリを把握する必要があります。あなたがそれを書くことができない場合、あなたはそれを知らないと仮定するかもしれません。とにかく、クエリといくつかのデータを表示することができれば、ジョインやwhere句を使って交差を回避することができます。 –

答えて

1

指定された方法はサポートされていません。は、EntityFrameworkがSQLクエリに変換できないことを意味します。実際には、ほとんどの場合、サポートされているContainsに変換することは可能です。メソッドを変更して一致するようにする必要があります。

public List<share> GetFeed(List<long> UserRules, List<long> ListedShares, string AuthorID) 
{ 
    List<share> listshare = DbContext 
     .shares 
     .Where(x => x.share_rules.Any(y => UserRules.Contains(y.rule_id))) 
     .ToList(); 
    return listshare; 
} 
関連する問題