Перевести одри uri в выражение - PullRequest
1 голос
/ 24 февраля 2012

Я бы хотел использовать фильтр действий для перевода Uri Odata в выражение Linq.Я делаю это, потому что я использую полученное выражение для запроса не бизнес-систем SQL.В веб-API WCF это было тривиально, потому что переведенный запрос был добавлен как свойство объекта запроса, как таковое:

var query = (EnumerableQuery)request.Properties["queryToCompose"];

Кажется, что он исчез.Есть ли какие-нибудь общедоступные API, которые я могу использовать для этого?

Ответы [ 3 ]

1 голос
/ 27 февраля 2012

Итак, как оказалось, запрос изменил ключи в коллекции свойств запроса.Также кажется, что внутренний фильтр, который анализирует запрос, запускается после пользовательских фильтров и, следовательно, не добавляет значение запроса.Чтобы получить переведенный запрос, вызовите следующее внутри действия контроллера.

(EnumerableQuery<T>)this.Request.Properties["MS_QueryKey"];
1 голос
/ 24 февраля 2012

Я пробовал что-то похожее ... Хотя и не идеально, вы можете получить выражения OData непосредственно из строки запроса и вручную построить выражение LINQ:

var queryParams = HttpUtility.ParseQueryString( ControllerContext.Request.RequestUri.Query );
var top = queryParams.Get( "$top" );
var skip = queryParams.Get( "$skip" );
var orderby = queryParams.Get( "$orderby" );

И примените это непосредственно к вашему IQueryable или к тому, что вы используете для фильтрации. Не так полезно, но начало положено.

0 голосов
/ 11 марта 2012

Выезд Linq2Rest . Это решает эту проблему.

...