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中进行了一些快速的基本分析,这是基于您的查询的结果.

ApplicationDbContext
.Articles
.Where(a => tags.Except( a.Tags.Select( t => t.Id ).ToList() ).Any() == false)
Run Code Online (Sandbox Code Playgroud)
Except()将为您提供第一个列表中第二个列表中不存在的项目
except 运算符产生两个序列之间的集合差。它只会返回第一个序列中未出现在第二个序列中的元素。
| 归档时间: |
|
| 查看次数: |
497 次 |
| 最近记录: |