Мне нужно передать набор значений в метод DomainService.Вот как мне бы хотелось, чтобы метод service выглядел следующим образом:
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 я могу передать параметр DOB через QueryParameters / QueryParameter в качестве параметра к методу сервиса, или, в качестве альтернативы, я могу сделать метод сервиса ненарным, заставить его возвращать все и вставить параметр DOB в FilterDescriptor.Оба работают (с одной оговоркой: я не могу понять, как заставить атрибут IgnoredValue XAML FilterDescriptor работать с нулевым 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 #, чтобы вставить выбранные значения списка в строку с разделителями или что-то в этом роде?Я пытаюсь выдвинуть здесь декларативную вещь, насколько это возможно, но где-то должен быть предел.