我需要将一组值传递给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参数作为参数传递给服务方法,或者我可以使服务方法为nonary,让它返回所有内容,并将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'不兼容---&gt; System.ArgumentNullException:值不能为空。”
我应该放弃并且只是定义客户端C#代码,将选定的列表框值填充到带分隔符的字符串中,或类似的东西?我试图在这里推销声明性的东西,但它必须在某个地方有限制。
答案 0 :(得分:1)
这就是说IsContainedIn需要一串逗号分隔的值而不是一个对象。
看一下使用String.Join创建字符串然后绑定到该字符串。您仍然可以将其作为页面上的属性。