Tobias Wälde Ответов: 1

В C# фильтр списка строковых списков, используя строку списка


Эй там,
У меня есть dataview, который заполняется объектом с помощью строковых списков. Я хочу выбрать подходящие записи, набрав поисковые слова в текстовом поле.

объект My:
class my_object
{
    List<string> column1 = new List<string>();
    List<string> column2 = new List<string>();
    List<string> column3 = new List<string>();
    List<string> column4 = new List<string>(); 
}


мои записи для dataview:
List<my_object> entries = new List<my_object>();



Моя цель состоит в том, чтобы отфильтровать записи, такие как функция поиска в проводнике windows, но с той разницей, что я хочу включить четыре столбца, а не только столбец с именем файла.
Есть ли такая возможность?

Надеюсь, вы сможете мне помочь.

Что я уже пробовал:

internal static List<my_object> SearchObject(this List<my_object> Source, List<string> SearchWords)
{
    List<my_object> results = new List<my_object>();

    foreach (my_object m in Source)
    {
        foreach(string s in SearchWords)
        {
            // Filter Column 1
            foreach(string c1 in m.column1)
            {
                if(c1.IndexOf(s) != -1)
                {
                    results.Add(m);
                    break;
                }
            }
        } 
    }

    return results;

    // Problem:
    // This function only filters the first column.
    // If I want to filter the next column, I have to break all 'foreach' blocks 
    // except the '(my_object m in Source)' block...

    // It the 'break' would work for more the one loop, this method would work...
}

Tomas Takac

Вы не должны иметь объект со списками, скорее вы должны иметь класс с 4 свойствами,а затем иметь список этого.

1 Ответов

Рейтинг:
2

P_Z

Привет, я думаю, что список результатов должен содержать совпадения из каждого столбца?
Если вы используете C#, то, вероятно, у вас не должно быть проблем с использованием Linq

//Source in this case refers to each column
//SearchWords list of strings to search
public List<string> SearchList(List<string> Source, List<string> SearchWords){
//your code can be shortened to Linq query similar to the following
List<string> results = Source.Where(x => SearchWords.Contains(x)).ToList(); 
//in sql this would translate similiar to:
//select Source.Value 
//from Source
//where Source.Value in ('Value1', 'Value2') --SearchWords
return results;
}

Regarding SearchObject, what is the use of passing List<my_object> Source when it seems you need only 1 my_object?
You can use the Linq query for the 4 lists in my_object.

my_object data = new my_objec(); //lists containing all data

List<my_object> entries = new List<my_object>();

So then
entries.column1 = SearchList(data.column1, SearchWords); //similar for the rest