避免DataTable查询和构建中的重复

时间:2015-12-30 09:18:14

标签: c# linq datatable ado.net

在查询数据表然后将其保存到DataTable时,什么是避免重复的正确方法。我使用下面的模式,一旦表增长,就会出现非常容易出错的情况。我看了下面的提示。第一个copyToDataTable()看起来并不适用,第二个对我来说太复杂了。我想将下面的代码分成两个单独的方法(第一个构建查询,第二个来检索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;
    }

1 个答案:

答案 0 :(得分:0)

首先,你必须决定什么&#34;重复&#34;在你的情况下意味着。根据您的代码,我会说副本是Date,ProductId和Distributor列中具有相同值的行。因此,首先为这些列添加多列主键。

其次,您应该添加某种首先查询现有行的代码,然后将这些现有行与您要创建的行进行比较。如果找到匹配项,则只需插入新行即可。