为什么COALESCE不能与RowFilter一起使用?

时间:2009-09-05 17:46:28

标签: sql wpf coalesce isnull rowfilter

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

现在,我想在NameListBox上启用过滤,以便列表只应取消包含TextBoxCustomerNameSearchBox中输入的文字的客户名称}。

通过在互联网上搜索,我遇到了RowFilter DataView的{​​{1}}财产 - 并且还玩了一点。现在我尝试了

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

1 个答案:

答案 0 :(得分:1)

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

MSDN: Expression syntax