2011-01-20 36 views
0

我有一个不完整的用户设置表。现在我有一个小程序从该表中提取设置。我如何确保数据库中有该用户的记录?C#从linq列表中插入缺少的记录?

我得到这个列表

List<Guid> usersWithoutInfo 

这个列表包含了我需要拉设置的用户ID。我如何首先循环访问此列表并插入缺失的记录? 我正在使用linq数据上下文进行所有数据处理。

回答

2

应该是这样的。你必须调整它有点编译并为您工作

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

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

然后使用usersToInsert插入数据库中的用户

1

我会使用SQL LEFT相当于JOIN语句。 Below语句将生成用户列表,以检查与现有用户名配对的现有用户。那些需要插入名称为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 
      }; 

您可以在SELECT之前添加WHERE以筛选出匹配的条目。

0

使用一个简单的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(); 

显然,将“表格名称”替换为“UserGuid”的Guid字段。