Мне нужно отразить все записи 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++;
}
}
}
}
Брайан, я добавил вам несколько подробностей. Я думаю, что ты на правильном пути. – mcass20