Каким будет правильный способ избежать дублирования при запросе данных, а затем сохранить его в 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;
}
Просьба поделиться реализацией 'RetrieveDataTableExConstraints()' – ViRuSTriNiTy
. Это просто получение схемы DataTable с SQL-сервера с помощью DataTable retrieveReady .... = reader.GetSchemaTable(); + некоторые мелкие хитрости, чтобы удалить PK, разрешить нули и т. д. – Turo
В чем ваш вопрос? Что вы подразумеваете под «избеганием дублирования»? –