我有一个数据库,其中包含保存user_id
s 和tag_id
s 的表。我想编写一个函数,它需要两个user_id
s 并返回tag_id
两个用户共有的 s。
这些是数据库中的示例行:
User_id Tag_id
1 100
1 101
2 100
3 100
3 101
3 102
我想从我的函数中得到的是,当我调用我的函数时getCommonTagIDs(1, 3)
,它应该返回(100,101)
。到目前为止,我所做的是将相关的行保存user_id
在两个不同的列表中,然后使用 for 循环,返回 common tag_id
s。
using (TwitterDataContext database = TwitterDataContext.CreateTwitterDataContextWithNoLock())
{
IEnumerable<Usr_Tag> tags_1 = database.Usr_Tags.Where(u => u.User_id == userID1).ToList();
IEnumerable<Usr_Tag> tags_2 = database.Usr_Tags.Where(u => u.User_id == userID2).ToList();
foreach (var x in tags_1)
{
foreach (var y in tags_2) {
if (x.Tag_id == y.Tag_id) {
var a =database.Hashtags.Where(u => u.Tag_id==x.Tag_id).SingleOrDefault();
Console.WriteLine(a.Tag_val);
}
}
}
}
我想问的是,我不想从数据库中获取所有行并在tag_id
函数中搜索 common s,而是希望tag_id
通过在数据库端进行计算,使用 LINQ 直接从数据库中获取 common s。如果你能帮助我,我将不胜感激。
这是我写的 SQL:
SELECT [Tag_id]
FROM [BitirME].[dbo].[User_Tag]
WHERE USER_ID = '1' AND Tag_id IN (
SELECT [Tag_id]
FROM [BitirME].[dbo].[User_Tag]
where USER_ID = '3')