我有这样的结构:
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 是否可以为我做这件事?有没有更温和的方法呢?