【发布时间】:2013-08-03 14:16:59
【问题描述】:
我有以下问题。我有一个绑定到ObservableCollection 的WPF 列表框。现在我想用全文字符串过滤框中的项目。
我通过在 ObservableCollection 上运行 linq 查询并将列表绑定到查询结果来做到这一点。它通常有效,但有些行为我无法解释。
列表条目示例: CMSRC_XXX_ADDR, CMDST_XXX_ADDR, TXDAT_DMA_ST_ADDR, ...
有效的搜索查询: 地址,XXX,XX,地址,CM
无效的搜索查询: CMS、CMSR、...
当我输入CM 时,它仍然显示CMSRC_XXX_ADDR 条目。当我输入CMS 时,CMSRC_XXX_ADDR 不再显示。
有人知道为什么吗?我希望我的问题很清楚。感谢您的帮助。
问候 多米尼克
string txtOrig = text;
string lower = txtOrig.ToLower();
string normalize = txtOrig.Normalize();
var bitfieldsfiltered = from bit in bitfields
let name = bit.name_
where
name.ToLower().StartsWith(lower)
|| name.StartsWith(txtOrig)
|| name.Normalize().StartsWith(normalize)
|| name.ToLower().Contains(lower)
|| name.Contains(txtOrig)
|| name.Normalize().Contains(normalize)
|| name.ToLower().EndsWith(lower)
|| name.EndsWith(txtOrig)
|| name.Normalize().EndsWith(normalize)
|| name.ToLower().Equals(lower)
|| name.Equals(txtOrig)
|| name.Normalize().Equals(normalize)
select bit;
list_box.ItemsSource = bitfields;
更新:错误不存在。标签中的数据不是列表框中的数据。由于 RecognizesAccessKey,缺少下划线。
【问题讨论】:
-
哇!为什么不使用 StringComparison 枚举之一?它可以将您的逻辑简化约 66%,并使其更易于调试。只是好奇?
-
@GarryVass 因为他可能不知道这样的枚举。
-
@user2591237,如果您重新调整您的问题范围以包括您乐于接受逻辑/效率改进?
-
@GarryVass 是的,我会接受每一项改进。我不需要它那样做。它只需要工作。问候
-
我将上传一些代码,以降低查询的复杂性并更轻松地实施诊断,以确保您的查询以您想要的方式执行。
标签: c# wpf linq search listbox