簡體   English   中英

排除要添加到列表中的項目

[英]Exclusing Items to be added to a List

我從數據庫中查詢兩個表,並將唯一值添加到通用列表。

如果有一個我不想添加到列表中的值,如何防止添加該項目?

using (myOledbConn = new OleDbConnection(connAccessLrProduct))
        {
            List<string> lst = new List<string>();
            myOledbConn.Open();
            OleDbCommand cmd = myOledbConn.CreateCommand();
            cmd.CommandText = @"SELECT tblProducts.CODE, tblSubject.SUBJECT, tblProducts.GenSubject
                               FROM tblSubject INNER JOIN tblProducts ON tblSubject.ID = tblProducts.SubjectID
                               WHERE [SUBJECT] = 'Arts' or [SUBJECT] = 'Aged Care';";


            OleDbDataReader dbReader = cmd.ExecuteReader();
            while (dbReader.Read())
            {
                string generalSublject;
                string subject = (string)dbReader["SUBJECT"];
                if (lst.Where(t => t == subject).Count() == 0)
                    lst.Add(subject);
                if (dbReader["GenSubject"] != DBNull.Value)
                {
                    generalSublject = (string)dbReader["GenSubject"];
                    if(generalSublject.Equals("No related topics"))
                    {
                        //how do I exclude this item from being added to the list?
                    }
                    if (lst.Where(t => t == generalSublject).Count() == 0)
                        lst.Add(generalSublject);

我建議您使用ISet<T>而不是List<T> ,它使元素對您而言是唯一的。 然后,可以通過if決定是否添加元素。

var mySet = new SortedSet<string>();

while(dbReader.Read())
{
  if(dbReader["GenSubject"] != DBNull.Value)
  {
    var generalSubject = (string)dbReader["GenSubject"];
    if(!generalSublject.Equals("No related topics"))
    {
      mySet.Add(generalSubject); // returns false if already in Set
    }
    else
    {
      // do nothing
    }
}

這對您有幫助嗎? 希望我做對了,並為您提供了僅關注問題的簡化代碼。 但是有一些含義:

  • ISet典型的實現是SortedSet (基於樹)和HashSet (基於哈希)-不保證元素的特定順序 ,但可以保證它們是唯一的
  • 您可以(或多或少)對數而不是線性地對ISet進行“ Contains ”(根據元素數,可以顯着提高程序速度)。
  • 如果合適,您也可以使用SQL DISTINCT來使元素唯一。 但是,這需要您重構查詢。

暫無
暫無

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

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