3

次のような(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」という形式です。

ソースは、テキスト 'Attri' で ItemType 列をフィルター処理するグリッド (インフラジスティックスの igrid) です。

私の質問は次のとおりです。トップとスキップのパラメーターのマッピングは簡単でしたが、フィルターを行う方法です。それを解析して独自の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);

助けてくれてありがとう!

ラルシ

4

2 に答える 2

1

次の 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();
于 2018-03-01T18:30:46.783 に答える
0

igGrid に MVC ラッパーを使用すると、マッピングが自動的に行われます。以下は、 Infragistics jQuery ヘルプからの引用です。

「ASP.NET MVC ラッパーを使用して LINQ (IQueryable) を介してサーバー側のデータにバインドする場合、URL でエンコードされたすべてのフィルタリング情報は自動的に LINQ 式の句 (Where 句) に変換されるため、これを行う必要はありません。データをフィルタリングするために追加するもの。」

于 2012-04-19T20:49:09.563 に答える