C # Вставить недостающие записи из списка с помощью linq? - PullRequest
0 голосов
/ 21 января 2011

У меня есть неполная таблица пользовательских настроек. Теперь у меня есть небольшая программа, которая вытягивает настройки из этой таблицы. Как я могу убедиться, что в базе данных есть запись для этого пользователя?

Я получил этот список

List<Guid> usersWithoutInfo

Этот список содержит идентификаторы пользователей, для которых мне нужно получить настройки. Как я могу сначала пройтись по этому списку и вставить недостающие записи? Я использую контекст данных linq для всей обработки данных.

Ответы [ 3 ]

2 голосов
/ 21 января 2011

Должно быть что-то вроде этого.Вам придется немного его настроить, чтобы скомпилировать и работать на вас

List<Guid> usersWithoutInfo = new List<Guid>(){......};

var usersToInsert = usersWithoutInfo.Where(userGuid => !usertableInDB.Contains(userGuid)).ToList();

Затем используйте usersToInsert для вставки пользователей в базу данных

1 голос
/ 21 января 2011

Я бы использовал эквивалент оператора 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, чтобы отфильтровать совпадающие записи.

0 голосов
/ 21 января 2011

Используйте простой цикл foreach для итерации по вашему списку, затем используйте ключевое слово Any, чтобы увидеть, существуют ли какие-либо записи для этого Guid.

var newSettings = new List<SettingsTableRecord>();
foreach (var userGuid in usersWithoutInfo) {
    if(!context.SettingsTableRecords.Any(u=>u.UserGuid.Equals(userGuid)){
        //do work to crate records, such as
        newSettings.Add(new SettingsTableRecord {UserGuid = userGuid, Email="Hi!"});
    }
}
//insert the new records
context.SettingsTableRecords.InsertAllOnSubmit(newSettings);
context.SubmitChanges();

Замените имя таблицы на «SettingsTable» и поле Guid на «UserGuid», очевидно.

...