簡體   English   中英

來自數據集的C#唯一字段和唯一字段

[英]C# Unique and Distinct Fields from DataSet

有更好的方法來執行此功能嗎? 即使我在后台工作程序中進行實際查詢,在進行查詢時,應用程序中還是會有一些暫停,所以想知道是否有一種更快的方法。

本質上, queries是在數據集中檢查特定列的唯一結果,以便用這些項目填充comboBox。 這使我們不必將任何選項硬編碼到過濾器中,並且如果我們在服務器上為這些值添加項目,則在下次自動更新數據集時添加它們。

我只是不確定我使用的方法是否可以以更短,更快的格式完成:

private IEnumerable<string> queryStatus;
private IEnumerable<string> queryPriority;
private IEnumerable<string> queryCompany;
private IEnumerable<string> queryCategory;

private void filterBuilder_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
   {
       Console.WriteLine(DateTime.Now.ToString());
       DataTable demoCriteria = Ds.Tables[1];
       queryStatus = (demoCriteria.AsEnumerable().Select(row => row.Field<string>("ows_Status"))).Distinct();
       queryPriority = (demoCriteria.AsEnumerable().Select(row => row.Field<string>("ows_Priority"))).Distinct();
       queryCompany = (demoCriteria.AsEnumerable().Select(row => row.Field<string>("ows_Company"))).Distinct();
       queryCategory = (demoCriteria.AsEnumerable().Select(row => row.Field<string>("ows_Category"))).Distinct();
   }

private void filterBuilder_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e)
   {
       foreach (string row in queryStatus)
       {
           if (!viewFilter_Status.Items.Contains(row))
               viewFilter_Status.Items.Add(new ComboBoxItem(row,
                                                           row));
           if (!editStatus.Items.Contains(row))
               editStatus.Items.Add(new ComboBoxItem(row,
                                                     row));
           if (!newStatus.Items.Contains(row))
               newStatus.Items.Add(new ComboBoxItem(row,
                                                    row));
       }
       foreach (string row in queryPriority)
       {
           if (!viewFilter_Priority.Items.Contains(row))
               viewFilter_Priority.Items.Add(new ComboBoxItem(row,
                                                              row));
           if (!editPriority.Items.Contains(row))
               editPriority.Items.Add(new ComboBoxItem(row,
                                                       row));
           if (!newPriority.Items.Contains(row))
               newPriority.Items.Add(new ComboBoxItem(row,
                                                      row));
       }
       foreach (string row in queryCompany)
       {
           if (!viewFilter_Company.Items.Contains(row))
               viewFilter_Company.Items.Add(new ComboBoxItem(row,
                                                             row));
           if (!editCompany.Items.Contains(row))
               editCompany.Items.Add(new ComboBoxItem(row,
                                                      row));
           if (!newCompany.Items.Contains(row))
               newCompany.Items.Add(new ComboBoxItem(row,
                                                     row));
       }
       foreach (string row in queryCategory)
       {
           if (!viewFilter_Product.Items.Contains(row))
               viewFilter_Product.Items.Add(new ComboBoxItem(row,
                                                             row));
           if (!editProduct.Items.Contains(row))
               editProduct.Items.Add(new ComboBoxItem(row,
                                                      row));
           if (!newProduct.Items.Contains(row))
               newProduct.Items.Add(new ComboBoxItem(row,
                                                     row));
           }

       MainFormCallbacks.EnableISTab(true);
   }

實際上並沒有在后台線程中進行工作-您只是在准備它。 調用Distinct()只會構建一個IEnumerable<T>當您對其進行迭代時 ,它將產生不同的項。 在“完成”方法之前,您不會對其進行迭代,該方法將返回UI線程中。

完全有可能通過強制在后台線程中執行查詢來消除延遲,如下所示:

 queryStatus = demoCriteria.AsEnumerable()
                           .Select(row => row.Field<string>("ows_Status"))
                           .Distinct()
                           .ToList(); // Note this call!

(顯然,其他值也是如此)。

暫無
暫無

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

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