【发布时间】:2020-04-28 03:06:16
【问题描述】:
我有以下情况:
- UserInterests 表中的用户 x 类别 ID:1、2、3
- UserInterests 表中的用户 y 类别 ID:1、2
类别 ID 是整数值,其中 (ApplicationUserId,CategoryId) 是提到的表的复合主键。 这是记录的形状:
用户 1
用户 2
用户 3
用户 1
用户 2
字符串兴趣=“1 2”
我想执行一个 SQL 查询,让我只检索兴趣为 1 和 2 的用户(不是用户 x)。
当我执行下面显示的查询时(知道结果变量包含我的用户的 id),我不断获取用户 x 和用户 y;我猜它正在检索包含 1&2 的用户,但我不希望用户 x 在结果中。
int count = 2
var result2 = (from t8 in result
from t9 in _dbContext.UserInterests
where t8.id == t9.ApplicationUserId && interests.Contains(t9.CategoryId.ToString())
group t8 by t8.id into g
where g.Count() == count
select g.Key).ToList();
感谢任何帮助!
【问题讨论】:
-
如果你的兴趣只是 1 和 2 而不是 3,那么尽量不要使用 Contains("1 2")。在您的情况下使用明确的 Equals("1 2") 。但是,如果您正在寻找更通用的内容,则需要解释这些值实际上是如何存储在各个表中的。如果它的纯字符串如“1 2 3”、“1 2”,那么恕我直言,我建议您重新考虑如何存储这些值。
-
类别 ID 是整数,它们可以是 1 或 2 或 3 ,因此我无法将包含一堆 categoryIds 的兴趣字符串与整数 categoryId 值进行比较,希望这能澄清& 我编辑了我的问题。 @Ak777
标签: c# sql database linq group-by