Linq查询以选择具有与值数组中的所有值匹配的子记录的所有记录?

时间:2018-10-12 14:00:46

标签: linq

我有一个表,该表包含具有相关表的记录,该表可能对每个主记录都有多个记录。这是标志表。 即

class Project(models.Model): id=models.UUIDField( primary_key=True, default=uuid.uuid4, editable=False) title = models.CharField(max_length=200) file = models.ForeignKey(File, on_delete=models.CASCADE, related_name='projects' ) type = models.CharField(max_length=200) def __str__(self): return self.title class File(models.Model): File_Status = Choices("Working","Uploading","Finished") id=models.UUIDField(primary_key=True, default=uuid.uuid4, unique=True) name=models.CharField(max_length=200) filetype=models.ForeignKey(FileType, on_delete=models.CASCADE) software=models.ForeignKey(Software, on_delete=models.CASCADE) description=models.TextField() created=models.DateTimeField(auto_now_add=True) modified=models.DateTimeField(auto_now_add=True) status=models.CharField(choices=File_Status, max_length=200, default=File_Status.Working) def __str__(self): return self.name

我正在尝试创建一个Linq查询,该查询将返回具有我指定的所有标志的记录。

这是我正在尝试执行的代码

MyRecord can have multiple subrecords Flag1, Flag4, Flag7

上面的代码几乎可以工作,但是返回带有var flags = new List<string>() { "Flag1"}; db.Contents.Include(f=>f.Flags) .Where(a => flags.All(b=>a.Flags.Any(f =>f.Name==b))); 的记录以及带有Flag1Flag1,Flag4的记录。我只需要返回设置了请求标志的记录。

1 个答案:

答案 0 :(得分:0)

var answer = db.Contents.Include(x => x.Flags)
      .Where(x => 
               x.Flags.Select(y => y.Name).Distinct().Count() == flags.Count 
               && 
               flags.All(y => x.Flags.Any(z => z.Name == y)))
      .ToList();