2015-12-30 3 views
2

Каким будет правильный способ избежать дублирования при запросе данных, а затем сохранить его в DataTable. Я использую шаблон ниже, который становится очень подверженным ошибкам, когда таблицы растут. Я посмотрел ниже намеки. С первым copyToDataTable() выглядит действительно не применимым, а второй для меня слишком сложным для задачи. Я хотел бы разделить приведенный ниже код на два отдельных метода (сначала для создания запроса, а второй для получения DataTable). Возможно, если я избегу анонимного типа в запросе, это должно быть проще избежать жесткого кодирования всех имен столбцов, но я как-то проиграл с этим.Избегайте дублирования в запросе и построении DataTable

Filling a DataSet or DataTable from a LINQ query result set или https://msdn.microsoft.com/en-us/library/bb669096%28v=vs.110%29.aspx

public DataTable retrieveReadyReadingDataTable() 
     { 
     DataTable dtblReadyToSaveToDb = RetrieveDataTableExConstraints(); 
     var query = from scr in scrTable.AsEnumerable() 
        from products in productsTable.AsEnumerable() 
        where(scr.Field<string>("EAN") == products.Field<string>("EAN")) 
        select 

        new 
        { 
         Date = DateTime.Today.Date, 
         ProductId = products.Field<string>("SkuCode"), 
         Distributor = scr.Field<string>("Distributor"), 
         Price = float.Parse(scr.Field<string>("Price")), 
         Url = scr.Field<string>("Url") 
        }; 


     foreach (var q in query) 
     { 
      DataRow newRow = dtblReadyToSaveToDb.Rows.Add(); 

      newRow.SetField("Date", q.Date); 
      newRow.SetField("ProductId", q.ProductId); 
      newRow.SetField("Distributor", q.Distributor); 
      newRow.SetField("Price", q.Price); 
      newRow.SetField("Url", q.Url); 
     } 

     return dtblReadyToSaveToDb; 
    } 
+0

Просьба поделиться реализацией 'RetrieveDataTableExConstraints()' – ViRuSTriNiTy

+0

. Это просто получение схемы DataTable с SQL-сервера с помощью DataTable retrieveReady .... = reader.GetSchemaTable(); + некоторые мелкие хитрости, чтобы удалить PK, разрешить нули и т. д. – Turo

+0

В чем ваш вопрос? Что вы подразумеваете под «избеганием дублирования»? –

ответ

0

Во-первых, вы должны решить, что "дубликат" означает в вашем случае. Согласно вашему коду, я бы сказал, что дубликат - это строка с таким же значением в столбце Date, ProductId и Distributor. Поэтому сначала добавьте первичный ключ для нескольких столбцов для этих столбцов.

Во-вторых, вы должны добавить какой-то код, который сначала запрашивает существующие строки, а затем сравнивает эти существующие строки с строками, которые вы хотите создать. Если совпадение найдено, просто просто не вставляйте новую строку.

+0

Хмм, это не очень мне много говорит :(Для меня дублирование заключается в том, что я устанавливаю имена строк, когда я уже делал это, когда 2-й. Создание анонимного типа 3-е. Они также уже доступны в извлеченном TataDable, начало кода. – Turo

+0

и на самом деле четвертый раз, как атрибуты q, к счастью, они являются intellisensed – Turo

Смежные вопросы