我需要将一组值传递给 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# 代码以将选定的列表框值填充到带有分隔符的字符串中,或者类似的东西?我正试图将声明性的东西推到最远的地方,但在某个地方必须有一个限制。