Witam,
Borykam się z problemem stworzenia eleganckiej klasy generującej na podstawie obranych kryteriów (jedynie łączniki AND, OR i NOT) wyrażenia wyszukiwania w serwisie Allegro.pl. Wyrażenia te nie są skomplikowane ale chciałbym ten proces zautomatyzować i zaprojektować obiektowo. Dla przykładu wyrażenie:
"gra (nowa pl) (diablo baldurs warcraft) -uzywana"
co logicznie odpowiada zapisowi:
"gra AND (nowa OR pl) AND (diablo OR baldurs OR warcraft) NOT uzywana"
Próbuję stworzyć klasę Criteria (generującą gotowe wyrażenie na podstawie kryteriów) i odpowiednie operatory logiczne OrCriterion, AndCriterion, NotCriterion.
Udało mi się stworzyć taką funkcjonalność:
SearchExpressionCriteria target = new SearchExpressionCriteria();
target
.Add(Expression.And("gra"))
.Add(Expression.Or("nowa"))
.Add(Expression.Or("pl"))
.Add(Expression.Or("diablo"))
.Add(Expression.Or("baldurs"))
.Add(Expression.Or("warcraft"))
.Add(Expression.Not("uzywana"));
Ale nie działa to właściwie bo z OR-ów generuje mi jeden nawias:
"gra (nowa pl diablo baldurs warcraft) -uzywana"
i nie wiem jak to zgrabnie zrealizować (również składniowo) by móc łączyć alternatywy w zbiory.
Czy ktoś z was ma pomysł jak to zgrabnie zrealizować?