C# 从其他列表筛选列表对象
在我的C.NET 3.5 win forms应用程序中,我有以下课程: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
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无论如何都会这样做