Фильтрация объектов списка из другого списка - PullRequest
3 голосов
/ 24 января 2009

У меня есть следующий класс в моем приложении Win # C # .NET 3.5:

class Field {

string objectName;
string objectType;
string fieldName;
string fieldValue;


}

и список fieldList, который является источником данных для флажка списка. В этом списке отображаются все различные имена объектов из моей коллекции fieldList.

Я хочу создать еще один проверенный список, который содержит fieldNames, но в первом списке списка отображаются только имена полей, с которыми связан зарегистрированный objectName.

Таким образом, мой вопрос заключается в том, как я могу запросить источник данных исходного списка objectNames, чтобы вернуть отдельный набор fieldNames, которые связаны с выбранным objectName?

Это не очень легко читать, поэтому я приведу пример:

Field1 {

objectName = 'objA'
FieldName = 'FieldA'

}

Field2 {

objectName = 'objA'
FieldName = 'FieldB'

}


Field3 {

objectName = 'objB'
FieldName = 'FieldA'

}

Field4 {

objectName = 'objC'
FieldName = 'FieldC'

}

Итак, предположим, в моем чекбоксе я выбираю objectNames objA и objB. Тогда мои возвращенные поля будут 'FieldA' и 'FieldB'.

Как я могу добиться этого с помощью LINQ или фильтрации моего общего списка полей? Могу ли я использовать методы 'select' или 'where', доступные для списка?

Ответы [ 2 ]

2 голосов
/ 24 января 2009

Сначала прочитайте имена объектов в массив или список; Я подделаю эту часть. Тогда это должно быть что-то вроде:

    string[] objectNames = { "objA", "objC" };
    var hashSet = new HashSet<string>(objectNames);

    var qry = (from row in data
               where hashSet.Contains(row.objectName)
               select row.fieldName).Distinct().ToList();

(редактировать)

Чтобы получить выбранные имена (бит, который я подделал), вы можете попробовать (не проверено):

    var selectedNames = namesCheckedListBox.CheckedItems.Cast<Field>()
        .Select(field => field.objectName);
    var hashSet = new HashSet<string>(selectedNames);

(обратите внимание, нет необходимости использовать Distinct() в приведенном выше, поскольку HashSet<T> делает это в любом случае)

1 голос
/ 24 января 2009
var selectedNames = ... // List of selected names
var selectedFields = (from f in fieldList
                      where selectedNames.Contains(f.objectName)
                      select f.FieldName).Distinct().ToList();
...