检查中的Hashset每个值查询

检查中的Hashset每个值查询

问题描述:

时,我有一个查询,其中在WHERE语句,我检查值,其中一个HashSet包含列,即:检查中的Hashset每个值查询

var cHashset = {"cat","dog","bird"} 

数据库的样子:

ID Category 
1  dog 
1  cat 
1  bird 
2  dog 
3  cat 
3  dog 
4  bird 

然后在查询的WHERE部分我:

.Where(o => cHashset.Contains(o.Category)) 
.Select (o => o.ID).Distinct(); 

我怎样才能确保我只选择值wher e他们有猫,狗和鸟类吗?上面目前的设置工作正常,如果它只是寻找一个类别,但不是如果我需要确保所有类别。

感谢您的帮助。

+0

因此,你需要所有这三个类别都存在的所有ID(如果我是正确的,在你的例子中是'1')? – HimBromBeere

+0

正确。 @HimBromBeere – yondaimehokage

您必须先通过您的ID进行分组。现在您可以查看cHashSet中的所有元素是否包含在给定组的类别中。

var result = myData.GroupBy(x => x.ID) 
    .Where(x => cHashSet.All(y => x.Select(z => z.Category).Contains(y))) 
    .Select(x => x.ID); 
+0

你错过了关闭一个延伸'.Where('我想。 – Alyafey

+0

@Alyafey的确,你是对的,更正了。 – HimBromBeere