如何从List <string>删除零个元素?

时间:2019-04-11 15:27:06

标签: c# list lambda removeall

阅读一些示例,但似乎我做错了什么。 需要从巨型列表中删除所有“ 0”字符串,而无需使用哈希表。

尝试使用Stack Owerflow和MSDN示例中的lambda示例,但是看起来有些混乱。

DataTable book = SQL.SqlGetTable(BookList.SelectedItem.ToString());
List<string> pagesExist = new List<string>();
for (int i = 0; i < book.Rows.Count; i++)
{
    pagesExist.Add(book.Rows[i][0].ToString());
}

var found = pagesExist.Find(x => x == "0");
if (found != null) 
    pagesExist.Remove(found);

我有一个pagesExist列表,其中包含4000个字符串元素。 假设

var found = pagesExist.Find(x => x == "0"); 

将累积列表中的所有零,并将其删除下一个字符串。但是不知何故发现了0个元素的结果

2 个答案:

答案 0 :(得分:2)

您可以使用RemoveAll

pagesExist.RemoveAll(p => p == "0");

答案 1 :(得分:2)

无需创建pagesExist列表。只需使用简单的l inq query over the DataTable过滤掉所有非零行。这样,您的整个代码将减少为:

DataTable book = SQL.SqlGetTable(BookList.SelectedItem.ToString());
var result = book.AsEnumerable().Where(r => r.Field<int>("FieldName") != 0);

我假设该列仅包含整数。如果没有,请继续使用Field<string>并过滤!= "0"


作为旁注,我建议调查SqlGetTable。如果它返回一个DataTable,它已经将所有这些数据从数据库中带到内存中,可以通过使用linq-2-sql或linq-2-entities之类的工具直接在DBMS上使用linq来避免这种情况