私は次の関数を持っています(それが重要な場合は、WCF サービスでホストされています):
public List<IceVsRepositoryFile> GetRepositoryFilesByRepositoryId(int repId)
{
var entity = new IceVSEntities();
var files = from p in entity.Files where p.RepositoryId == repId select p.FileId;
List<long> iList = files.ToList();
var repFiles = from p in entity.RepositoryFiles where iList.Contains(p.FileId) select p;
if (!repFiles.Any())
return null;
var retFiles = repFiles.ToList().Select(z => new IceVsRepositoryFile
{
FileId = (int)z.FileId,
RollbackFileId = (int)z.RollbackFileId,
UserId = (int)z.UserId,
FileContents = z.FileContents,
ChangeDescription = z.ChangeDescription
}).ToList();
return retFiles;
}
この関数を実行すると、「LINQ to Entities はメソッド 'Boolean Contains(Int64)' メソッドを認識せず、このメソッドはストア式に変換できません」という次のエラーが表示されます。
エラー メッセージが表示される理由を理解しました。私の質問は、クエリを書き直して、これを期待どおりに機能させるにはどうすればよいですか? SqlLite 3 の場合は、バックエンド データベースです。私は .NET 3.5 を使用しています。