user_id
s とsを保持するテーブルを持つデータベースがありますtag_id
。2 つの を取り、両方のユーザーが共通に持っている をuser_id
返す関数を書きたいと思います。tag_id
これらは、データベースからのサンプル行です。
User_id Tag_id
1 100
1 101
2 100
3 100
3 101
3 102
私が自分の関数に求めているのは、自分の関数を のように呼び出すと、getCommonTagIDs(1, 3)
が返されること(100,101)
です。これまでに行ったことは、関連する行をuser_id
2 つの異なるリストに保持し、for ループを使用して共通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);
}
}
}
}
私が聞きたいのは、データベースからすべての行を取得して関数で共通の s を検索する代わりに、データベース側で計算を行うことにより、LINQ を使用してデータベースからtag_id
共通の s を直接取得したいということです。tag_id
助けていただければ幸いです。
これは私が書いた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')