Я бы использовал эквивалент оператора SQL LEFT JOIN. Оператор ниже выдаст список пользователей для проверки существующих, в сочетании с существующим именем пользователя. Те элементы, которые имеют парное имя как NULL, должны быть вставлены:
List<string> users = new List<string> { "User1", "User3", "User5"};
List<string> usersToCheck = new List<string> { "User1", "User2", "User4", "User5" };
var leftJoin =
from userToCheck in usersToCheck
join existingUser in users
on userToCheck equals existingUser into joined
from existingUser in joined.DefaultIfEmpty()
select new
{
userToInsert = userToCheck,
user = existingUser ?? null
};
Вы можете добавить WHERE перед SELECT, чтобы отфильтровать совпадающие записи.