如何从List中删除零元素 ?

问题描述 投票:2回答:2

阅读几个例子,但似乎我做错了。需要在不使用哈希表的情况下从巨大列表中删除所有“0”字符串。

尝试使用Stack Overflow和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);

我有一个4000字符串元素的pagesExist列表。假设

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

将累积列表中的所有零,并将删除它们下一个字符串。但不知何故在0元素中找到了结果

c# list lambda removeall
2个回答
2
投票

无需创建pagesExist列表。只需使用简单的linq 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可以避免这种情况


2
投票

你可以使用RemoveAll

pagesExist.RemoveAll(p => p == "0");
© www.soinside.com 2019 - 2024. All rights reserved.