2010-08-11 241 views
0

我需要在SQL數據庫中鏡像DNS服務器上的所有DNS條目。我能夠使用WMI和C#查詢DNS。我可以使用L2S查詢SQL的現有記錄,但是還有很大的改進餘地。LINQ to SQL INSERT WHERE不在集合中

LINQ To SQL語句是什麼樣子,它會將不在WMI返回的ManagementObjectCollection中的記錄插入到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)。載有()

您可以使用子查詢/載有檢查,看看是否在收集或不存在的。我不知道你在比較場地方面是什麼,所以我不能告訴你更多的細節。

HTH。

+0

Brian,我爲你增加了一些細節。我認爲你在正確的軌道上。 – mcass20 2010-08-11 20:24:02