3

我的 C# .NET 3.5 win forms 应用程序中有以下类:

class Field {

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


}

和一个 List fieldList,它是一个选中列表框的数据源。这个列表框显示了我的 fieldList 集合中所有不同的对象名称。

我想创建另一个包含 fieldNames 的选中列表框,但仅显示在第一个列表框中具有关联的选中 objectName 的字段名。

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

4

2 回答 2

2

首先,将对象名称读入数组或列表;我会伪造那部分。那么它应该是这样的:

    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>无论如何都是这样)

于 2009-01-24T08:22:33.783 回答
1
var selectedNames = ... // List of selected names
var selectedFields = (from f in fieldList
                      where selectedNames.Contains(f.objectName)
                      select f.FieldName).Distinct().ToList();
于 2009-01-24T08:09:26.680 回答