C# 查询时检查哈希集中的每个值

C# 查询时检查哈希集中的每个值,c#,asp.net-mvc,linq,C#,Asp.net Mvc,Linq,我有一个查询,在where语句中,我检查哈希集包含列的值,即: 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.

我有一个查询,在where语句中,我检查哈希集包含列的值,即:

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();
如何确保只选择猫、狗和鸟类别的值?如果上面的当前设置只查找一个类别,但如果我需要确保所有类别,则无法正常工作


谢谢您的帮助。

您必须先按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);

所以,如果我是对的,那么您想要所有这些ID,其中所有三个类别都存在于您的示例中1?正确@你错过了一个分机,我想是在那里。