0

我需要将一组值传递给 DomainService 方法。这是我希望服务方法的样子:

IQueryable<Person> GetPeople( Nullable<DateTime> MinDOB, IList<String> Ethnicities )
{
    return
        from
            Person item in ObjectContext.People
        where
            item.DOB >= MinDOB
            && Ethnicities.Contains( item.ETHNICITY )
        select
            item;
}

该查询无需参数即可正常工作,仅使用 DOB 参数即可正常工作。在 XAML 中,我可以通过 QueryParameters/QueryParameter 将 DOB 参数作为参数传递给服务方法,或者我可以使服务方法成为非元的,让它返回所有内容,并将 DOB 参数粘贴到 FilterDescriptor 中。两者都有效(有一个警告:我无法弄清楚如何使 FilterDescriptor XAML 的 IgnoredValue 属性与 null DateTime 一起工作)。到现在为止还挺好。但是日期是标量,而 ListBox.SelectedItems 不是。

我不断收到服务方法上的“必须是预定义的可序列化类型之一”错误,如上面所定义的(无论如何,MSDN 中哪里有那些被禁止的猩红色类型的列表?),以下也不起作用:

<ria:DomainDataSource.FilterDescriptors>
    <ria:FilterDescriptor PropertyPath="ETHNICITY" Operator="IsContainedIn" Value="{Binding ElementName=_lbEthnicities, Path=SelectedItems}" />
</ria:DomainDataSource.FilterDescriptors>

它抛出“运算符'IsContainedIn'与操作数类型'String'和'ObservableCollection`1'不兼容---> System.ArgumentNullException:值不能为空。”

我是否应该放弃并只定义客户端 C# 代码以将选定的列表框值填充到带有分隔符的字符串中,或​​者类似的东西?我正试图将声明性的东西推到最远的地方,但在某个地方必须有一个限制。

4

1 回答 1

1

这就是说 IsContainedIn 需要一串逗号分隔值而不是对象。

看看使用 String.Join 创建字符串然后绑定到它。您仍然可以将其作为页面上的属性。

于 2011-02-18T08:30:29.793 回答