2012-06-12 3 views
1

Вот что я хочу сделать:SQL «в» поведении типа с WCF DATASERVICE

string[] names= {"Dave","Mike","Sara","Roger"}; 
var events = eventsDB.where(a=>names.Contains(a.name)); 

Я думаю, что это довольно ясно. Где eventsDB - соединение Linq to SQL, все хорошо - но это не будет работать с сервисом. Есть ли способ достичь этого?

Приветствия!

ответ

1

Спасибо за советы, ребята, я думаю, что нашел способ получить то, что хочу от веб-службы, не добавляя еще один метод к службе, просто создав URI запроса вручную ... частично.

string[] names = { "Dave", "Mike", "Sara", "Roger" }; 

StringBuilder sb = new StringBuilder(); 
sb.Append("("); 

foreach (string s in names) 
{ 
    sb.Append(String.Format("name eq '{0}'",s)); 
    sb.Append(" or "); 
} 
sb.Remove(sb.Length - 4, 4); 
sb.Append(")"); 

var events = eventsDB.AddQueryOption("$filter",sb.toString()); 

уведомление функция AddQueryOption

0

Вы можете открыть метод службы, который возвращает массив.

Тогда вы могли бы назвать это как

serviceProxy.serviceMethod.where(.... 

Но я не думаю, что вы хотите так это. Для начала база данных и сервис - это совершенно разные вещи.

Linq to WCF? Хорошая идея, но не вычисляется.

0

OData базовый протокол для служб данных WCF в настоящее время не поддерживает это.

Вы можете выполнить операцию обслуживания для этого на стороне сервера и передать в список значений в качестве параметра. Обратите внимание, что для работы службы список должен быть объединен с одной строкой, например, с запятыми. Если вы перейдете к действию, вы можете перейти непосредственно в список.

Другой вариант - построить запрос, подобный этому. Если количество значений в массиве невелико, вы можете построить запрос, например Где (a => a.Name == "John" || a.Name == "Mary" || ...)

Смежные вопросы