私はそのような構造を持っています:
public class Tag
{
public int TagId { get; set; }
public virtual ICollection<Vacancy> Vacancies { get; set; }
// ...
}
public class Vacancy
{
public int VacancyId { get; set; }
public virtual ICollection<Tag> Tags { get; set; }
// ...
}
これらのエンティティは、EF / Code First アプローチを使用して MS SQL にマップされます。
その後、コンテキストから (ユーザー クエリに基づいて) タグのリストを取得します。
List<Tag> userSelectedTags = ...;
そして、これらのタグのすべて (!) を含むすべての欠員を選択したいと思います。たとえば、次のようになります。
List<Vacancy> vacancies = context.Where(v => v.Tags.Intersect(userSelectedTags)).ToList();
しかし!問題は、膨大な量のデータがある可能性があることです。また、AFAIK Intersect は、空席ごとにすべてのタグを選択してから Intersect を実行するため、最善のアプローチではありません。SQL Server をあまりロードしたくないので、そのために純粋な SQL クエリを書くことができます。しかし、LINQ は私のためにそれを行うことができるのだろうか? それを行うより穏やかな方法はありますか?