Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > LINQ (Language-Integrated Query) > Сравнение строк двух таблиц средствами linq


Автор: madFrame 18.4.2014, 15:46
Всем привет!
Есть две таблицы(одна dbf файл), на сервер данные добавляются из dbf, причём данные в dbf часто меняются, как осуществить проверку по строчкам? Не понимаю саму концепцию алгоритма..  В этом куске кода просто добавляю все данные из файла на серв.:
    
Код

using (var context = new ObjectEntity())
                {
                    FileDBF DBF = new FileDBF();//класс для чтения дбф
                    DataTable dt = DBF.GetAll(@"C:\Users\Documents\BNKSEEK.DBF");
 
                    progressBar1.Maximum = dt.Rows.Count;                   
                    foreach (DataRow dr in dt.Rows)
                    {                       
                        Table row = new Table();
                        row.IDNT = dr.ItemArray[12].ToString();
                        и т.д......
 
                        context.Table.Add(row);
                        progressBar1.Value++;
                    }
                    context.SaveChanges();                  
                }
            }

Автор: madFrame 28.4.2014, 17:10
Решил проблему.
=)
Кому интересно:

 
Код

using (var context = new ObjectEntity())
                {
                    FileDBF dbf = new FileDBF();
                    DataTable dt = dbf.GetAll(@"C:\Users\Documents\BNKSEEK.DBF");

                    progressBar1.Maximum = dt.Rows.Count;
                    progressBar1.Value = 0;

                    DataRow[] dataRows = new DataRow[dt.Rows.Count];
                    dt.Rows.CopyTo(dataRows, 0);

                    var entityRows = context.Table.Where(n => n.Id > 0);

                    IEnumerable<DataRow> data = dataRows.ToList();
                    IEnumerable<Table> rTables= entityRows.ToList();

                    foreach (var dr in data)
                    {
                        var table = rTables.FirstOrDefault(m => m.BIK == dr[12].ToString());
                        //Сушествует ли запись на сервере
                        if (table != null)
                        {
                            //Обновить запись
                            table .BIK = dr[12].ToString();      
                            // и т.д.
                  
                        }
                        else
                        {
                            //Добавить новую запись 
                            Table field = new Table ();
                            field.BIK = dr[12].ToString(); 
                            // и т.д.                       
                            context.Table .Add(field);
                        }                       
                        progressBar1.Value++;                     
                    }
                    context.SaveChanges();
                }
            }


Может ещё короче можно?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)