查询时检查Hashset中的每个值

时间:2017-04-12 11:44:47

标签: c# asp.net-mvc linq

我有一个查询,在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();

如何确保我只选择有猫,狗和鸟类别的值?如果只查找一个类别,则上面的当前设置可以正常工作,但如果我需要确保所有类别,则无法正常工作。

感谢您的帮助。

1 个答案:

答案 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);