【发布时间】:2010-09-21 20:04:18
【问题描述】:
我需要将一组值传递给 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>
它抛出“Operator 'IsContainedIn' 与操作数类型 'String' 和 'ObservableCollection`1' 不兼容 ---> System.ArgumentNullException: Value cannot be null。”
我是否应该放弃并只定义客户端 C# 代码以将选定的列表框值填充到带有分隔符的字符串中,或者类似的东西?我正在尝试将声明性的东西推到最远的地方,但是在某个地方必须有一个限制。
【问题讨论】:
标签: .net silverlight xaml silverlight-4.0 domainservices