0

データベースから 2 つのテーブルをクエリし、一意の値を一般的なリストに追加します。

リストに追加したくない値がある場合、その項目が追加されないようにするにはどうすればよいですか?

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);
4

1 に答える 1

1

ISet<T>a の代わりに aを使用することをお勧めし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
    }
}

これはあなたの役に立ち、あなたの質問に答えましたか? 問題のみに焦点を当てた簡略化されたバージョンのコードで、あなたが正しく理解し、助けてくれることを願っています. ただし、いくつかの意味があります。

  • An ISet- 典型的な実装はSortedSet(ツリーベース) とHashSet(ハッシュベース) です -要素の特定の順序は保証されませんが、一意であることは保証されます。
  • 線形の作業ではなく、(多かれ少なかれ) 対数的な作業を行うことができます (要素の数によっては、プログラムがかなり高速化される可能性がありますContains) 。ISet
  • 必要に応じて、SQLDISTINCTを使用して要素を一意にすることもできます。ただし、これにはクエリをリファクタリングする必要があります。
于 2013-02-08T10:50:56.810 に答える