Мне нужно отразить все записи DNS на нашем DNS-сервере в базе данных SQL. Я могу запросить DNS с помощью WMI и C #. И я могу запросить SQL для существующих записей, используя L2S, но есть много возможностей для улучшения.
Как выглядит оператор 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++;
}
}
}
}