1

Linq to Entities を使用して、SQLIQueryable<T>の句に相当する別の WHERE 句を追加したいと考えていEXISTSます。他のテーブルから実際にデータを取得する必要はありません。結果をフィルタリングする条件が満たされているかどうかを確認するだけです。これが私の最新の試みです:

IQueryable<FileEntity> files = repository.Files.Where(...);
// More stuff done to files

files = files.Where(f => repository.FileInfo.Where(i => i.Foo == "bar")
                                            .Select(i => t.FileId)
                                            .Contains(f => f.FileId));
var list = files.ToList(); // ERROR!

私も次のようなことを試しました:

files = files.Where(f => repository.FileInfo.Any(i => i.FileId == f.FileId));

いずれにせよ、例外は ol です。「'FileInfo' 型の定数値を作成できません。このコンテキストでは、プリミティブ型 ('Int32、String、および Guid' など) のみがサポートされています。」

データベース サーバーでこの種のクエリを実行するにはどうすればよいでしょうか。

4

2 に答える 2

3

さて、1 つのオプションは結合を使用することです。

files = files.Join(repository.FileInfo.Where(i => i.Foo == "bar"),
                   f => f.FileId,
                   i => i.FileId,
                   (f, i) => f)
             .Distinct();

それが必ずしも SQL の EXISTS クエリに変換されるとは思いませんが、クエリ プランを見てみると、同じことをしている可能性があります...

于 2012-05-15T19:55:36.753 に答える
3
IQueryable<FileEntity> files = repository.Files.Where(...);
// More stuff done to files
var ids = repository.FileInfo.Select(i=>i.FileId).ToList();

var list = files.Where(f => ids.Contains(f.FileId)).ToList();
于 2012-05-15T20:59:43.220 に答える