我编写了一个通用类,该通用类存储在组合框项目列表中,使用数据库标识符的键/值及其字符串标签值。通过这种方式选择索引,我得到的是数据库主键和用于视觉目的的字符串标签。问题是,我要覆盖组合框以使用子字符串进行增强的“建议/附加”搜索,而不仅仅是像C#/。NET中的默认组合框那样搜索“ StartsWith”。
问题是使用linq(ComboBox组件的子类):
private Expression<Func<ObjectCollection, IEnumerable<string>>> _propertySelector
_suggBindingList.Clear();
_suggBindingList.RaiseListChangedEvents = false;
_propertySelectorCompiled(Items) //Items is ObjectCollection <-- crashes
.Where(_filterRuleCompiled)
.OrderBy(_suggestListOrderRuleCompiled)
.ToList()
.ForEach(_suggBindingList.Add);
_suggBindingList.RaiseListChangedEvents = true;
_suggBindingList.ResetBindings();
简单的解决方案是手动循环遍历项目,然后手动进行转换/转换,但是我希望有一种更简单的方法允许组合框DataItem自定义类在运行时转换为字符串...因此上面的代码将在添加了常规组合框数据或键/值对的自定义类组合框项目上正常工作。该类的ToString()仅使用标签将自身表示为字符串,我认为将覆盖此内容,但我想不是。
有什么建议吗?
答案 0 :(得分:0)
不幸的是,没有一种简单的通用方法可以找到linq,因此我只是写了相应的代码来依赖.ToString(),因此我们以字符串格式表示并操作了对象(甚至是我的自定义对象)相应地。因此,我采取了一种通用方法,只是删除了linq,因为它会在我的自定义类上崩溃,并且似乎不会调用ToString()覆盖,只是在运行时强制转换而失败。
哦,还是不错的通用解决方案,但是使用linq很好。不幸的是,linq现在已不在解决方案中。