C# 从其他列表筛选列表对象

C# 从其他列表筛选列表对象,c#,generics,checkedlistbox,C#,Generics,Checkedlistbox,在我的C.NET 3.5 win forms应用程序中,我有以下课程: class Field { string objectName; string objectType; string fieldName; string fieldValue; } 以及作为checkedlistbox数据源的列表字段列表。此列表框显示我的fieldList集合中所有不同的ObjectName 我想创建另一个包含字段名的checkedlistbox,但只在第一个列表框中显示具有关联的CheckedOb

在我的C.NET 3.5 win forms应用程序中,我有以下课程:

class Field {

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


}
以及作为checkedlistbox数据源的列表字段列表。此列表框显示我的fieldList集合中所有不同的ObjectName

我想创建另一个包含字段名的checkedlistbox,但只在第一个列表框中显示具有关联的CheckedObjectName的字段名

因此,我的问题是如何查询原始objectName列表的数据源,以返回与选定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或过滤我的通用字段列表来实现这一点?我可以使用列表中可用的“选择”或“位置”方法吗?

首先,将对象名称读入数组或列表;我会假装那个角色。那么应该是这样的:

var selectedNames = ... // List of selected names
var selectedFields = (from f in fieldList
                      where selectedNames.Contains(f.objectName)
                      select f.FieldName).Distinct().ToList();
    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无论如何都会这样做