2016-05-04 12 views
1

Ich erben ein System in C#. Ich habe viele Anweisungen in der Datenbank wie folgt:Datenbank gespeicherte Sätze zum Überprüfen des Klassenstatus

StartReal.IsEmpty() && EstimatedStart.Date < DateTime.Today.Date 
StartReal.IsEmpty() && EstimatedStart.Date > DateTime.Today.Date 
StartReal.IsEmpty() && EstimatedStart.Date == DateTime.Today.Date 

Alle Felder gehören zu einer Klasse namens TASKS. Jetzt zerlege ich jeden der Sätze (Aufspalten durch UND/ODER und durch Operator) und mache dann die Analyse des Satzes, um das gewünschte Ergebnis zu haben. Dies führt zu einer sehr niedrigen Leistung. Gibt es eine andere Art von Operation, die durchgeführt werden kann?

Bearbeiten: Ich erhalte eine Liste von der DB, die jeweils RULECODE, BESCHREIBUNG und EXPRESSION (die oben genannten) hat. Dann spalte ich jeden Ausdruck zweimal:

private int TaskSituation(TasksBOL pTask, List<SituationRulesBOL> pRules) 
    { 
    string[] aCommands; 
    char[] aSeparators = { '&', '|' }; 
    char[] aOperators = { '=', '<', '>' }; 

    int iCode = 0; 

    foreach (SituationRulesBOL o in pRules) 
    { 
     string sExpression = o.Expression; 

     if (sExpression.Contains("&&") || sExpression.Contains("||")) 
     { 
      aCommands = sExpression.Split(aSeparators, System.StringSplitOptions.RemoveEmptyEntries); 
     } 

     iCode = CheckExpression(pTask, aCommands); 
    } 

    return iCode; 
    } 

Die bisherige Methode jedes Teil des Satzes wird und spaltet es für UND/ODER. Dann übergibt es die Task-Informationen und die Sentences an CheckExpression und macht eine weitere Aufteilung nach Operator und vergleicht sie mit den Task-Daten.

+1

Können Sie uns Ihren neuen Code bitte zeigen? Wenn dies der Arbeits-/Produktionscode ist, den Sie gerade überprüfen möchten, ist [codereview.se] möglicherweise die bessere Seite, um Ihre Frage zu stellen. –

+0

Ich habe die Frage mit einem Teil des Codes bearbeitet, damit Sie eine Vorstellung davon haben, wie ich gehe. Ist noch nicht in Produktion. Ist für folgende Bauaufgaben offensichtlich eine Baufirma. Schätze jede Hilfe. – Nane

+0

Was macht 'CheckExpression'? Sollte es nicht schlau genug sein, die Ausdrücke so zu bewerten, wie sie sind? Ich bin mir nicht sicher, ob ich die Notwendigkeit verstehe, sie auf dem '&&' hier zu trennen (dh warum kann das nicht eine einzige Regel sein?) –

Antwort

Verwandte Themen