Службы данных WCF: запрос по нескольким параметрам - PullRequest
0 голосов
/ 07 сентября 2011

Я пытаюсь сгенерировать запрос к моей службе WCF.Мне нужно запросить WCF по параметру datetime ИЛИ по идентификаторам.

Я имею в виду, что в конечном результате я хочу получить URL, например, myservice.svc / MyObjects ()?eq 3 или Id eq 45 или Id eq 112

Проблема в том, что у меня есть коллекция идентификаторов на стороне клиента и одна переменная даты.Так как я могу сгенерировать такой запрос в WCF?

Вот код, который у меня есть сейчас:

 var localEntityIds = DbConnection.ObjectContextConnection.GetEntitiesByDate<T>(DateToReplicate).Select(x => x.Id);
            if (DateToReplicate > DateTime.MinValue)
            {
                expQuery =
                    Service.CreateQuery<T>(SetName).Where(
                        x => x.ReplicaInfo.CreateDate >= DateToReplicate ||
                            x.ReplicaInfo.ModifyDate >= DateToReplicate || localEntityIds.Where(y=>y ==x.Id).Any()) as DataServiceQuery<T>;
            }

Этот код выдает исключение, что максимальная версия протокола должна быть не меньшечем 3.0 и любой метод не поддерживается.Но у меня есть версия 3.0

config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3;

Я также пытался решить эту проблему с помощью этого кода, но wcf ничего не возвращает в этом случае:

     var localentities = DbConnection.ObjectContextConnection.GetEntitiesByDate<T>(DateToReplicate).Select(x => x.Id);
            if (DateToReplicate > DateTime.MinValue)
            {
                expQuery =
                    Service.CreateQuery<T>(SetName).Where(
                        x => x.ReplicaInfo.CreateDate >= DateToReplicate ||
                            x.ReplicaInfo.ModifyDate >= DateToReplicate) as DataServiceQuery<T>;
            }

            foreach (var localentity in localentities)
            {
                expQuery = expQuery.AddQueryOption("or", string.Format("Id eq guid'{0}'", localentity));
            }

1 Ответ

1 голос
/ 07 сентября 2011

Создайте целое где условие как строку и используйте AddQueryOption("$filter", yourBuiltQueryString). Как я знаю, вы не можете добавить только часть условия - имя добавленной опции запроса должно начинаться с $, что является только определенным набором операторов. Из-за этого вы не можете использовать условие Where в своем запросе - необходимо добавить все условие путем вызова метода AddQueryOption для построения правильной последовательности or.

В случае Any убедитесь, что вы используете правильный CTP (кстати, CTP не готов к выпуску). Он был добавлен в июнь 2011 CTP , и вы должны использовать эту библиотеку как на сервере, так и на клиенте.

...