我想过滤一个列表,这是一个字典的值并返回一个过滤的字典。例如,在此ListView中:
var filteredLvItems = ConfigManager.TemplateNamesAsLvItem
.Where(x => x.Text.ToUpper()
.StartsWith(searchParam))
.ToArray();
ConfigManager是一个静态类,TemplateNamesAsLvItem是一个静态属性。 searchParam是TextBox的内容,用户可以在其中过滤值。 现在我有这个数据类型:
Dictionary<TreeNode, TreeNodeCollection>
其中键是父节点,值是子节点。我试过这个来实现一个包含所有过滤的TreeNodeCollection节点的字典:
var filteredTvCollection = ConfigManager.TemplateNamesAsNodes.Values
.Cast<TreeNode>()
.Where(y => y.Text.StartsWith(searchParam))
.ToDictionary(t => t, t => t.Nodes);
treeViewTemplates.Nodes.Clear();
foreach (KeyValuePair<TreeNode, TreeNodeCollection> nodes in filteredTvCollection)
{
if (!treeViewTemplates.Nodes.Contains(nodes.Key))
treeViewTemplates.Nodes.Add(nodes.Key);
var indexOfParentNode = GetParentNodeIndexByNodeName(nodes.Key.Text);
if (nodes.Value.Count > 0)
treeViewTemplates.Nodes[indexOfParentNode].Nodes.AddRange(nodes.Value.Cast<TreeNode>().ToArray());
目的是过滤此列表,清除树视图并仅向用户显示“已过滤”的树视图。 我知道这段代码不起作用,但其他一切都会导致错误。这一次崩溃了。 这个问题可能吗?我试图避免foreach循环和不必要的代码。希望有人能帮助我! 谢谢!
编辑:
我也试过这个:
foreach (KeyValuePair<TreeNode, TreeNodeCollection> nodes in ConfigManager.TemplateNamesAsNodes)
{
if (!treeViewTemplates.Nodes.Contains(nodes.Key))
treeViewTemplates.Nodes.Add(nodes.Key);
var indexOfParentNode = GetParentNodeIndexByNodeName(nodes.Key.Text);
if (nodes.Value != null)
treeViewTemplates.Nodes[indexOfParentNode].Nodes
.AddRange(nodes.Value.Cast<TreeNode>()
.Where(t => t.Text.Contains(searchParam)).ToArray());
}
但那里没有任何事情发生。只是父节点被导入。