Je n'arrive pas à trouver un pointeur dans la bonne direction, je ne suis même pas sûr de ce que les termes sont que je devrais faire des recherches, mais d'innombrables heures de googling semblent me tourner dans des cercles, j'espère que la ruche collective de L'intelligence du débordement de pile peut vous aider.
Le problème est-ce, j'ai besoin d'un moyen de filtrer les données dans ce que je ne peux que appeler un arborescence logique composé. Actuellement, le système implémente un système simple et filtrant. Par exemple, disons que nous avons un jeu de données de personnes. Vous ajoutez un tas de filtres tels que montrez à toutes les personnes où (sexe = femelle) et (âge> 23) et (âge
Le problème que je rencontre est comment puis-je gérer l'utilisateur à pouvoir construire des requêtes complexes impliquées et ou ou? Je pense à quelque chose comme un arbre où chaque nœud représente et expression évaluant ses enfants à vrai ou faux. Un exemple simpliste serait - le filtre jusqu'à ((sex == mâle et âge == 25) ou (sexe == femme et statut == célibataire)) et IQ> 120. Désolé, je ne peux pas penser à un meilleur exemple à le moment. Mais comment allez-vous représenter ce type d'arborescence d'expression et évaluer les éléments dans une collection contre ces filtres. Quelles sont certaines références qui aideraient? Enfer, quels sont certains sacrages Google qui pourraient mener une direction positive ?! p>
Merci à toute personne qui peut fournir une aide. P>
Voici un exemple de requête composée dans l'arbre Formulaire en utilisant un jeu de données de personnes p>
donc dans la forme d'arbre im réflexion p> Je pense que la solution consiste à représenter chaque nœud tel dans une structure de données comme p> Node
{
OpType - AND or OR
ExpressionField - The field to evaluate
ExpressionOp - =, !=, >, >=, <, <=
ExpressionValue - the value to compare the field's value against
Function Evaluate() - returns a bool
}
5 Réponses :
Je dois dire que c'est pourquoi les moteurs de base de données sont construits. Vous pouvez faire tout ce dont vous avez besoin avec définir la logique et vous pouvez même arriver au résultat que vous recherchez, mais ces thèses sont des problèmes standard résolus par des bases de données et des SQL. Vous pouvez également consulter Linq pour une solution en code. P>
Je pense qu'il veut dire comment il peut construire de manière dynamique cette expression au sein de SQL.
Oui, il s'agit de présenter une ui solide à l'utilisateur qui leur permet de construire facilement une requête. Je pense que j'en ai compris avec une structure arborese assez simple et quelques fonctions rares simples, je sais que les autres ont étudié ce problème et aimeraient apprendre leurs pensées et leurs expériences, mais à ce jour n'avaient pas encore compris comment trouver le autres. En outre, dans ce cas, toutes les données sont en mémoire.
Une option serait de prendre l'ensemble des critères et de permettre à l'utilisateur de créer un ensemble et des critères et de stocker l'ensemble. Donc, Set 1 serait une femme IQ> 120, puis permet aux utilisateurs de spécifier plusieurs ensembles pour l'ORS. Cela pourrait être fait graphiquement de manière intéressante permettant aux utilisateurs de faire glisser et de déposer des ensembles. Peut-être que vous pourriez placer des ensembles à l'intérieur de la création d'une intersection ou d'une jointure d'ensembles. Juste une idée désolé, je n'ai pas eu le creux de votre question le premier tour.
Merci pour l'aide, je crois que j'ai proposé une bonne solution à cela et posterai plus tard.
On dirait que vous devez créer une interface utilisateur qui permet la création d'un arbre d'analyse simple. Lorsque les presses vont, vous pouvez passer à l'arborescence et créer une arborescence d'expression LINQ à partir de cette structure d'interface utilisateur. Exécutez la requête LINQ, puis traiter les résultats selon vos besoins. Je vous recommanderais donc de lire sur les arbres d'expression de Linq. P>
Votre analyse de l'expression ((sexe == mâle et âge == 25) ou (sexe == femme et statut == Simple)) et IQ> 120 a l'air impair. Je l'analyserais comme suit: Le type d'arborescence serait le suivant: p>
Je vois ce que vous faites, mais je pense que l'expression intérieure (champ de valeur - op-optique telle que QI> 120) peut toujours être évaluée à un simple bool, donc en l'affactant vers le bas, vous finissez avec un tas de bool à l'intérieur des nœuds à représentent le résultat de cette expression des nœuds et d'un groupe de nœuds et des nœuds représentant comment ce bool est absorbé dans l'arbre de résultat. Marquage aussi correct que pour le moment, je crois que c'est la meilleure réponse.
Pas sûr que je comprenne. Strictement évaluer () devrait prendre comme un argument une sorte d'objet contextuel (peut-être une rangée d'une table), ce qui donnerait une valeur pour le champ (qui pourrait être différente pour chaque ligne).
Ces types de requêtes sont souvent présentés sous la forme d'un tableau ou code> de
et code> ed clauses. C'est-à-dire un format tabulaire dans lequel vous avez lu plusieurs conditions
et code> ed ensemble, puis lisez jusqu'à
ou code>. Cela conduit à une certaine répétition des conditions, mais est facile pour les utilisateurs de lire, d'écrire et de comprendre. Votre échantillon
((sex == mâle et âge == 25) ou (sexe == femme et statut == Single)) et IQ> 120 code> ressemblerait à
Sex == Male & Age == 25 & IQ > 120
Sex == Female & Status == Single & IQ > 120
Vous voudrez peut-être souhaiter Google pour des termes tels que «Predicate Calculus» et «forme normale conjonctive». P>
Vous suggère de clarifier la forme de vos données: SQL DB? Je suppose que le tag "as3" fait référence à ActionScript 3: Dans l'affirmative, êtes-vous vraiment à la recherche de techniques spécifiques C # ou as3, ou juste pour "théorie"?
Les données sont en mémoire, bien que techniquement, la mise en œuvre soit à la fois en Flash et dans Silverlight, je suis beaucoup plus intéressé par la compréhension de la solution générale qu'une implémentation spécifique. Le creux du problème implique de présenter une interface utilisateur à l'utilisateur qui leur permet de construire de manière dynamique une requête complexe de filtrer l'ensemble de données. J'ai besoin d'une structure de données solide pour représenter la requête. Jusqu'à présent, j'ai ce qui suit pour un nœud - Type - Type - et ou OR - Le champ de l'ensemble de données Ce nœud est ciblé - Opération - =,! =,>, << =,> = - valeur - la valeur à appliquer l'opération contre
Explication plus claire! Je vous suggère de clarifier si la structure de données est en C # / Silverlight: Si oui, je suppose que vous utiliserez LINQ pour faire le "levage lourd". Si vous êtes déjà à un niveau élevé avec Linq, à l'aide de Lambdas, des méthodes anonymes, etc., c'est une chose: si vous n'êtes pas, vous pouvez obtenir de bons conseils pour (si vous le demandez) sur les ressources d'étude LINQ (IMHO JON Le "C # en profondeur" de Skeet est le meilleur livre C # sur la planète avec une couverture superbe de LINQ). Cela peut être sans importance pour votre idée, mais vous pouvez utiliser un dictionnaire avec "quelles que ce soit" comme des touches et des méthodes exécutables (anonymes) comme des valeurs. - billw
Les réponses et les commentaires ici semblent très pertinents pour votre question: Stackoverflow.com/questions/1703340/...
Il serait intéressant de savoir si, à ce stade, vous avez des "contraintes" sur le type d'interface utilisateur que vous souhaitez voir: Par exemple, "excluez-vous" un assistant qui vous fait traverser une séquence logique d'étapes qui sont efficacement isole les sélections de champs d'intérêt à partir des données, c'est-à-dire que, pour chaque champ interrogé, vous présentez une interface adaptée à visuellement (autant que possible) de sélectionner les paramètres que pour la requête de ce champ? Avez-vous très bien été décédé une arborescence d'arbre va être votre majeure forme UI?
Billw - Merci pour votre aide, cet autre poste est très utile et que ce soit à la hauteur de cet allié. Je pense avoir trouvé une excellente solution seul qui est ce type d'assistant mini sous forme d'arborescence qui bascule entre une liste et des conditions simples plates, mais permet à l'utilisateur d'ajouter ou des conditions également dans lesquelles la liste est représentée dans le forme d'arbre. Plus de cela plus tard, merci pour l'aide!