簡體   English   中英

避免在DataTable查詢和構建中重復

[英]Avoid duplication in DataTable query and build

在查詢數據表並將其保存到數據表時,避免重復的正確方法是什么。 我正在使用以下模式,一旦表增長,該模式很容易出錯。 我看了下面的提示。 首先, copyToDataTable()看起來並不適用,其次,對於我來說太復雜了。 我想將下面的代碼分為2個單獨的方法(第一個用於構建查詢,第二個用於檢索DataTable)。 也許如果我避免在查詢中使用匿名類型,則應該更容易避免對所有列名進行硬編碼-但我對此莫名其妙。

從LINQ查詢結果集https://msdn.microsoft.com/zh-cn/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;
    }

首先,您必須確定案例中“重復”的含義。 根據您的代碼,我會說重復的行是在Date,ProductId和Distributor列中具有相同值的行。 因此,首先為這些列添加一個多列主鍵。

其次,您應該添加某種代碼,該代碼首先查詢現有行,然后將這些現有行與要創建的行進行比較。 如果找到匹配項,則只需不插入新行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM