2016-09-13 5 views
1

Ich versuche, insensentive Übereinstimmung mit einer MySQL-Tabelle während der Verwendung von Dapper-Erweiterungen zu tun, aber ich bekomme eine Null-Ausnahme für den Feldnamen beim Versuch, es UpperCase innerhalb der Linq-Ausdruck zu machen :Vergleich zwischen Groß- und Kleinschreibung in DapperExtensions-Prädikat

Hier ist der Code:

  var predicateGroup = new PredicateGroup { Operator = GroupOperator.Or, Predicates = new List<IPredicate>() }; 

      var term = "term"; 
      if (term.IsNotNullOrEmpty()) 
      { 
       predicateGroup.Predicates.Add(Predicates.Field<Company>(p => p.company_code, Operator.Like, string.Format("%{0}%", term))); 
       predicateGroup.Predicates.Add(Predicates.Field<Company>(p => p.company_name.ToUpper(), Operator.Like, string.Format("%{0}%", term))); 
      } 

      return Count<Company>(predicateGroup, TdsAuthConnectionString); 

weiß jemand, wie ich DapperExtensions Prädikate zu tun, einen Fall unempfindlich Spiel verwenden kann?

Vielen Dank für jede Hilfe, codenewbie

Antwort

0

Der p => p.company_name Schnipsel ein Linq Lambda Expression<Func<T, object>> Ausdruck ist zu sagen DapperExtensions welche Eigenschaftsnamen innerhalb seiner internen Zuordnung zu verwenden. Wenn Sie dort Großbuchstaben verwenden, zeigt es nicht auf einen gültigen Eigenschaftsnamen, sondern auf die Großbuchstabenfunktion.

Wenn Sie nach einer Datenunabhängigkeit suchen, ist dies eine Funktion Ihres Datenbankmoduls. Wenn Sie Microsoft SQL Server verwenden, wird die Groß-/Kleinschreibung der Daten durch die Sortierung Ihrer Datenbank gesteuert. Wenn Sie eine Codepage ohne Berücksichtigung der Groß-/Kleinschreibung verwenden, z. B. Latin1_General_CI_AS, wird bei allen Abfragen, die Sie an die Datenbank senden, die Groß-/Kleinschreibung nicht beachtet. Sie können überprüfen, was die Server-Sortierung wird durch die folgende SQL-Anweisung ausgeführt wird:

SELECT SERVERPROPERTY ('Collation') 

Sie können eine Liste von Sortierungen finden und ihr Fall Empfindlichkeiten here

+0

Danke. Wir benutzen mysql. Ich werde in die Einstellungen schauen, aber ich weiß nicht, ob ich irgendetwas ändern kann. Ich melde mich zurück. – codenewbie

+0

Leider kann ich die db nicht ändern. Gibt es eine Möglichkeit innerhalb des Prädikats oder anderswo, dass ich "vorschlagen" kann, dass die Abfrage "UPPER (company_code)" verwendet? – codenewbie

+0

Ich habe den IFieldPredicate-Code in der DapperExtensions Codebase @ https://github.com/tmsmith/Dapper-Extensions/blob/master/DapperExtensions/Predicates.cs durchgesehen und kann nicht sehen, wie es gemacht werden könnte ohne einen ganz neuen Prädikat-Typ zu implementieren. Sie könnten stattdessen für diese spezielle Abfrage zurück zu Dapper wechseln. Sie können in Ihrer App frei zwischen Dapper und DapperExtensions (und DapperContrib usw.) wechseln, wenn eine Bibliothek Ihren Anforderungen nicht entspricht. –

Verwandte Themen