0

我正在 WPF 中开发一个小型应用程序。我有一个ListBox名称NameListBox,其ItemsSource属性设置为 a DataView,因此显示客户名称列表。名称由 3 部分组成:FirstNameMiddleNameLastName。我使用转换器在列表中显示客户的全名。一切正常(我认为这种细节水平足以了解整体情况)。

现在我想启用过滤NameListBox这样列表应该只显示那些包含在TextBox命名中输入的文本的客户名称CustomerNameSearchBox

通过在 Internet 上搜索,我发现了 - 的RowFilter属性,DataView并且还玩了一点。现在当我尝试

private void CustomerNameSearchBox_TextChanged(object sender, TextChangedEventArgs e)
{
  //((DataView)NameListBox.ItemsSource).RowFilter = @"COALESCE(FirstName+' '+MiddleName+' '+LastName, COALESCE(FirstName+' '+LastName, COALESCE(FirstName, LastName))) LIKE '%" + CustomerNameSearchBox.Text + @"%'";
    ((DataView)NameListBox.ItemsSource).RowFilter = @"ISNULL(FirstName+' '+MiddleName+' '+LastName, ISNULL(FirstName+' '+LastName, ISNULL(FirstName, LastName))) LIKE '%" + CustomerNameSearchBox.Text + @"%'";
}

这件事给了我预期的结果。但是等等..这里有一些奇怪的东西!!!

如您所见,两行的结构是相同的 - 只是COALESCE代替ISNULL. 但是当我取消注释第一行(并注释掉第二行)时,它不起作用!!!!它在运行时在该行抛出异常"The expression contains undefined function call COALESCE()."!!!!

尽管ISNULL此时符合我的目的,但我真的很想知道为什么会发生这种异常。此外,即使是简单的事情,如

(...).RowFilter = @"COALESCE(FirstName,'')";

好像不行!!!!(这意味着它不仅仅是一个语法问题)

谁能解释一下这种行为?提前致谢。

标签: WPF SQL COALESCE ISNULL RowFilter

4

1 回答 1

1

Rowfilter 本身不是 SQL,功能范围有限

MSDN:表达式语法

于 2010-03-11T16:43:57.537 回答