Отображение $ filter из параметра oData в linq Где - PullRequest
3 голосов
/ 03 января 2012

У меня есть (что я думаю, это формат odata) URL вроде этого:

http://localhost:2282/SSE.Web/History.cshtml?GetData=true&itemId=AKE-00129&pid=1&%24filter=indexof(ItemType%2C%27Attri%27)+ge+0&%24skip=0&%24top=50&%24inlinecount=allpages&_=1325589443808

здесь интересен параметр $ filter.Он имеет формат "indexof (ItemType, 'Attri') ge 0"

Источником является сетка (iggrid из Infragistics), которая фильтрует столбец ItemType с текстом 'Attri'

Мой вопрос: отображение параметров top и skip было тривиальным, но как сделать фильтр.Нужно ли мне анализировать его и создавать свой собственный linq, или есть какие-то другие способы?

У меня есть такой код:

        var skip = int.Parse(Request["$Skip"]);
    var top = int.Parse(Request["$top"]);
    var filter = Request(["$filter"]);

    var db = Database.Open("SSEConnectionString");

    var entries = db.Query("select * from eHistory order by timestamp desc")
    Json.Write(new { results = entries.Where(????).Skip(skip).Take(top), totalRecCount = entries.Count() }, Response.Output);

Спасибо за любую помощь!

Ларси

Ответы [ 2 ]

0 голосов
/ 01 марта 2018

Вы можете использовать следующий пакет NuGet для применения фильтра: https://www.nuget.org/packages/Community.OData.Linq

Пример кода будет:

using System.Linq;
using Community.OData.Linq;

// dataSet in this example - any IQuerable<T> 
Sample[] filterResult = dataSet.OData().Filter("Id eq 2 or Name eq 'name3'").ToArray();
0 голосов
/ 20 апреля 2012

Если вы используете оболочку MVC для igGrid, то сопоставление для вас выполнено. Ниже приводится цитата из справки jQuery Infragistics :

"Когда оболочка ASP.NET MVC используется для привязки к данным на стороне сервера через LINQ (IQueryable), всю фильтрующую информацию, которая закодирована в URL автоматически переводится в выражения выражений LINQ (где пункт), поэтому вам не нужно делать ничего дополнительного для того, чтобы фильтровать данные. "

...