排除要添加到列表中的项目
本文关键字:项目 列表 添加 排除 | 更新日期: 2023-09-27 17:58:14
我从数据库中查询两个表,并将唯一值添加到通用列表中。
如果有一个值我不想添加到列表中,我如何防止添加该项?
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
来使元素唯一。但是,这需要重构查询