包含至少所有实体框架

hey*_*ega 5 linq asp.net-mvc entity-framework

我的数据库中有以下2个实体.

public class Article
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    // Some code removed for brevity

    public virtual ICollection<Tag> Tags { get; set; }
}


public class Tag
{

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    // Some code removed for brevity

    public virtual ICollection<Article> Articles { get; set; }

}
Run Code Online (Sandbox Code Playgroud)

我需要根据传递给我的操作的标记ID来过滤这些文章.

public ActionResult FindAll(List<int> tags)
{

    //
    // I need to return all articles which have ALL the tags passed into this method
    //

    var query = ApplicationDbContext.Articles...


}
Run Code Online (Sandbox Code Playgroud)

例如,如果我将1,2,3传递给动作,则只返回具有这3个或更多标签的文章.

我怎样才能做到这一点?

谢谢你们的好评!

您的所有答案都产生了正确的结果,因此我在sql中进行了一些快速的基本分析,这是基于您的查询的结果.

查询结果

Amm*_*CSE 3

使用except()Any()类似

ApplicationDbContext
    .Articles
    .Where(a => tags.Except( a.Tags.Select( t => t.Id ).ToList() ).Any() == false)
Run Code Online (Sandbox Code Playgroud)

Except()将为您提供第一个列表中第二个列表中存在的项目

except 运算符产生两个序列之间的集合差。它只会返回第一个序列中未出现在第二个序列中的元素。