LINQ to SQL INSERT ГДЕ не в коллекции - PullRequest
0 голосов
/ 12 августа 2010

Мне нужно отразить все записи 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++;
                }
            }
        }
    }

1 Ответ

1 голос
/ 12 августа 2010

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

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

HTH.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...