У меня есть база данных с таблицей, которая хранит user_id
s и tag_id
s. Я хочу написать функцию, которая принимает два user_id
s и возвращает tag_id
s, которые оба пользователя имеют вместе.C# Получить общие записи по LINQ
Эти выборки строк из базы данных:
User_id Tag_id
1 100
1 101
2 100
3 100
3 101
3 102
Что я хочу от моей функции является то, что, когда я называю функцию как getCommonTagIDs(1, 3)
, он должен вернуться (100,101)
. То, что я делал до сих пор, заключается в том, что я сохраняю строки, связанные с user_id
в двух разных списках, а затем используя для циклов, возвращаю общие tag_id
.
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
с в функции, я хочу, чтобы получить общие tag_id
s непосредственно из базы данных с помощью LINQ, делая расчеты на стороне базы данных. Буду признателен, если вы поможете мне.
Это 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')
Если ваш пример вызовет возврат 100, 101 и 102? –
Нет, только 100 и 101, потому что userid = 1 и userid = 2 имеют только 100 и 101 общий – alidogan