2010-08-11 2 views
0

Мне нужно отразить все записи DNS на нашем DNS-сервере в базе данных SQL. Я могу запросить DNS с помощью WMI и C#. И я могу запросить SQL для существующих записей, используя L2S, но есть много возможностей для улучшения.LINQ to SQL INSERT Где нет в коллекции

Как выглядит оператор LINQ To SQL, который будет вставлять записи, отсутствующие в ManagementObjectCollection, возвращаемые WMI в таблицу SQL?

Что я до сих пор работаю, но кажется неэффективным.

internal static void SyncRecordInfo() 
     { 
      int affected = 0; 
      DnsEntityDataContext db = new DnsEntityDataContext(); 
      //Select records in DNS 
      string[] Types = { "A", "CName", "MX" }; 

     for (int i = 0; i < Types.Length; i++) 
     { 
      string Query = "SELECT * FROM MicrosoftDNS_" + Types[i] + "Type"; 
      ObjectQuery qry = new ObjectQuery(Query); 
      DnsProvider dns = new DnsProvider(); 
      ManagementObjectSearcher s = new ManagementObjectSearcher(dns.Session, qry); 
      ManagementObjectCollection col = s.Get(); 
      dns.Dispose(); 

      foreach (var item in col) 
      { 
       //(from m in ManagementObjectCollection select m.SomeID).Contains(<main source field>) 

       int count = (from r in db.Records 
           where ((r.Data.Contains(item["RecordData"].ToString())) && (r.Name.Contains(item["OwnerName"].ToString()))) 
           select r).Count(); 

       if (count < 1) 
       { 
        //Insert records in SQL 
        Record record = new Record(); 
        record.Data = item["RecordData"].ToString(); 
        record.Name = item["OwnerName"].ToString(); 
        //record.Notes = item["ContainerName"].ToString(); 
        record.Type = Types[i]; 

        db.Records.InsertOnSubmit(record); 
        db.SubmitChanges(); 
        affected++; 
       } 
      } 
     } 
    } 

ответ

1

где! (С т в ManagementObjectCollection выберите m.SomeID) .Contains()

используется подзапрос/содержит, чтобы проверить, существует ли один в сборе или нет. Я не знаю, что вы сравниваете по полю, поэтому я не могу рассказать вам больше деталей.

HTH.

+0

Брайан, я добавил вам несколько подробностей. Я думаю, что ты на правильном пути. – mcass20

Смежные вопросы