2012-04-07 7 views
2

Wenn mehrere Gruppierung deserialisieren jqGrid verwendet wird, jqGrid erweiterte Suchkriterien Suche generieren können wiewie mehrere Gruppensuchkriterien in asp .net MVC2

{"groupOp":"AND","rules":[],"groups":[{"groupOp":"AND","rules":[{"field":"Nimi","op":"cn","data":"kk"},{"field":"Nimi","op":"cn","data":"kkk"}],"groups":[]}]} 

es in ASP .NET MVC2 mit

deserialisieren Der Versuch,
  var serializer = new JavaScriptSerializer(); 
      var filtersList = serializer.Deserialize<Filter>(_filters); 


class Filter 
{ 
    public GroupOp groupOp { get; set; } 
    public List<Rule> rules { get; set; } 
    public List<Filter> groups { get; set; } 
} 

class Rule 
{ 
    public string field { get; set; } 
    public Operations op { get; set; } 
    public string data { get; set; } 
} 

enum GroupOp 
{ 
    AND, 
    OR 
} 

enum Operations 
{ 
    eq, // "equal" 
    ne, // "not equal" 
    lt, // "less" 
    le, // "less or equal" 
    gt, // "greater" 
    ge, // "greater or equal" 
    bw, // "begins with" 
    bn, // "does not begin with" 
    @in, // "in" 
    ni, // "not in" 
    ew, // "ends with" 
    en, // "does not end with" 
    cn, // "contains" 
    nc // "does not contain" 
} 

kehrt leer filtersList.rules Eigenschaft

Wie korrekte Regeln aus diesen Daten zu bekommen?

Update

Filter

{"groupOp":"AND","rules":[{"field":"Nimi","op":"cn","data":""}, 
{"field":"Nimi","op":"cn","data":""},{"field":"Nimi","op":"cn","data":""}], 
"groups":[{"groupOp":"AND","rules":[],"groups":[]},{"groupOp":"AND","rules": 
[{"field":"Nimi","op":"cn","data":""}],"groups":[{"groupOp":"AND","rules":[], 
"groups":[{"groupOp":"AND","rules":[],"groups":[]},{"groupOp":"AND","rules":[],"groups":[{"groupOp":"AND","rules":[],"groups":[{"groupOp":"AND","rules":[], 
"groups":[{"groupOp":"AND","rules":[],"groups":[{"groupOp":"AND","rules":[],"groups":[]},{"groupOp":"AND","rules":[],"groups":[]}]}]}]}]},{"groupOp":"AND","rules":[{"field":"Nimi","op":"cn","data":""}],"groups":[{"groupOp":"AND","rules":[{"field":"Nimi","op":"cn","data":""},{"field":"Nimi","op":"cn","data":""}], 
"groups":[]}]},{"groupOp":"AND","rules":[],"groups":[]},{"groupOp":"AND","rules":[],"groups":[]},{"groupOp":"AND","rules":[],"groups":[]},{"groupOp":"AND","rules":[],"groups":[]}]}]}]} 

von aktualisierten Teil in referenzierten Antwort unter Verwendung von Code erzeugt noch ungültig, wo

((klient.Nimi ILIKE ('%' || E'' || '%') ESCAPE '!')AND(klient.Nimi ILIKE 
('%' || E'' || '%') ESCAPE '!')AND(klient.Nimi ILIKE ('%' || E'' || '%') ESCAPE '!'))AND 
((((klient.Nimi ILIKE ('%' || E'' || '%') ESCAPE '!'))AND(((((())))AND(((klient.Nimi ILIKE ('%' || E'' || '%') ESCAPE '!'))AND(((klient.Nimi ILIKE ('%' || E'' || '%') ESCAPE '!') 
AND(klient.Nimi ILIKE ('%' || E'' || '%') ESCAPE '!')))))))) 

Antwort

1

ich kein Problem sehen, dass der Code

const string filters = "{\"groupOp\":\"AND\",\"rules\":[]," + 
    "\"groups\":[{\"groupOp\":\"AND\",\"rules\":[" + 
     "{\"field\":\"Nimi\",\"op\":\"cn\",\"data\":\"kk\"}," + 
     "{\"field\":\"Nimi\",\"op\":\"cn\",\"data\":\"kkk\"}],\"groups\":[]}]}"; 

var serializer = new JavaScriptSerializer(); 
var filtersList = serializer.Deserialize<Filter>(filters); 

produzieren die filtersList wo filtersList.rules ist leere Liste. Es entspricht den Eingabedaten, die Sie haben. Auf der anderen Seite ist der filtersList.groups Teil nicht leer. Das filtersList aus dem obigen Code erzeugen das Filter Objekt, das entspricht die folgende direkte Initialisierung:

var filtersList = new Filter { 
    groupOp = GroupOp.AND, 
    rules = new List<Rule>(0), 
    groups = new List<Filter> { 
     new Filter { 
      groupOp = GroupOp.AND, 
      rules = new List<Rule> { 
       new Rule {field = "Nimi", op = Operations.cn, data = "kk"}, 
       new Rule {field = "Nimi", op = Operations.cn, data = "kkk"} 
      }, 
      groups = new List<Filter>(0) 
     } 
    } 
}; 

Wenn man die Informationen aus den filtersList einem analysieren kann immer noch die WHERE Aussage wie die folgenden

am Ende bekommen
(Nimi LIKE '%kk%') AND (Nimi LIKE '%kkk%') 

siehe den Code von AKTUALISIERTEN Teil von the answer zum Beispiel. Um genau der Code aus der Antwort zu sein, produziert ((Nimi LIKE '%kk%')AND(Nimi LIKE '%kkk%')), die praktisch gleich ist.

+0

Ich habe versucht, aktualisierte Teil. Für leere Filter '{" groupOp ":" AND "," Regeln ": []," groups ": []}' gibt es null – Andrus

+0

@Andrus: Ist es nicht korrekt? Um genau zu sein ist es 'neuer Filter {groupOp = GroupOp.AND, rules = new Liste (0), groups = new Liste (0)};'. Es ist also genau wie deine Eingabedaten. Welchen deserialisierten Wert erwarten Sie für die Eingabe? – Oleg

+0

Ich aktualisierte Frage und fügte Testfall hinzu, der ungültigen where-Klausel zurückgibt, die UPDATED-Teil von http://stackoverflow.com/a/10052736/315935 – Andrus