【问题标题】:Checking for each value in Hashset when querying查询时检查 Hashset 中的每个值
【发布时间】:2017-04-12 20:07:08
【问题描述】:

我有一个查询,在 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(如果我是对的,在你的例子中是 1)?
  • 正确。 @HimBromBeere

标签: c# asp.net-mvc linq


【解决方案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);

【讨论】:

  • 你错过了关闭一个分机 .Where( 我想。
猜你喜欢
  • 2017-06-05
  • 1970-01-01
  • 1970-01-01
  • 2013-10-14
  • 2016-04-07
  • 2016-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多