我有一个查询,在WHERE语句中,我检查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();
如何确保我只选择有猫,狗和鸟类别的值?如果只查找一个类别,则上面的当前设置可以正常工作,但如果我需要确保所有类别,则无法正常工作。
感谢您的帮助。
答案 0 :(得分:1)
您必须先按您的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);