如何使用通配符过滤列表中的项目?

时间:2014-03-05 03:34:00

标签: c# list filtering

我创建了一个代码来处理从一台服务器到另一台服务器的数据,并且它每隔几分钟就会执行一次。所以,它必须更快。在该过程中有一个包含1000多条记录的列表。记录是字符串格式。我想用字符串的给定部分过滤那些记录。应过滤所有匹配的记录并将其存储在另一个列表中。

例如:我在列表中有一些记录。

Table1_Field1
Table1_Field2
Table1_Field3
Table2_Field4
Table2_Field4
Table2_Field4

如果我想获取包含字符串部分“Table1”的所有记录,那么结果应该是这样的。

Table1_Field1
Table1_Field2
Table1_Field3

我知道这可以通过使用LINQ来完成。但是,我正在使用Visual Studio 2005 .Net Framework 2.0。我也可以通过DataTable.Select()来做到这一点,但这很耗时。任何消耗时间超过50毫秒的方法都会导致我的应用程序出现问题。所以,它必须更快。我不能使用带有通配符'*'的简单循环来过滤记录。

请建议我如何在最短的时间内完成此操作。

1 个答案:

答案 0 :(得分:2)

假设我们有一个List,你只想要包含字符串部分“Table1”的记录。

下面的代码将返回一个包含结果的列表:

List<string> myList = new List<string>();

myList.Add("Table1_Field1");
myList.Add("Table1_Field2");
myList.Add("Table1_Field3");
myList.Add("Table2_Field4");
myList.Add("Table2_Field4");
myList.Add("Table2_Field4");

List<string> resultList = myList.FindAll(MyFunc);


private static bool MyFunc(string s)
{

    // AndAlso prevents evaluation of the second Boolean
    // expression if the string is so short that an error
    // would occur.
    if (s.Contains("Table1")) {
        return true;
    } else {
        return false;
    }
}