检查中的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他们有猫,狗和鸟类吗?上面目前的设置工作正常,如果它只是寻找一个类别,但不是如果我需要确保所有类别。
感谢您的帮助。
答
您必须先通过您的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
因此,你需要所有这三个类别都存在的所有ID(如果我是正确的,在你的例子中是'1')? – HimBromBeere
正确。 @HimBromBeere – yondaimehokage