2009-02-27 5 views
2

Ich triyng zu einer psuedo-Fuzzy-Logik-Abfrage im aktiven Datensatz.Großer OR-Ausdruck in Castle.ActiveRecord

Wie drücke ich:

field1 wie 'A' oder field2 wie 'A' oder field3 wie 'A' oder field1 wie 'B' oder field2 wie 'B' oder field3 wie ' B '

Verwenden der ICriteria-Objekte ... wo die "Likes" InsensitiveLikeExpressions sein müssen?

Antwort

2

Wie wäre es damit:

public T[] FuzzyFind<T>(string[] fields, string[] values) where T: class { 
     var dis = new Disjunction(); 
     foreach (var f in fields) 
      foreach (var v in values) 
       dis.Add(new InsensitiveLikeExpression(f, v, MatchMode.Anywhere)); 
     return ActiveRecordMediator<T>.FindAll(dis); 
    } 

Dann sind Sie es so nennen:

var locations = FuzzyFind<ARAddressableLocation>(new[] { "field1", "field2", "field3 }, new[] { "a", "b" }); 

, die alle Kombinationen von (Feld erzeugt , Wert)

MatchMode nach Bedarf anpassen.

0

Sein nicht ICriteria Objekte, sondern in HQL die Antwort lautet:

Meine Felder sind immer Strings, so gewählt ich sie in mich setzen stattdessen NHibernate-Parameter zu verwenden.

(Stimmen für die Antwort würde geschätzt werden)

+0

Funktioniert "WHERE AND>"? Plus, nicht mit den richtigen Parametern kann gefährlich sein: http://ayende.com/Blog/archive/2006/09/30/ORMAndSQLInjections.aspx –

+0

Opps das war ein Tippfehler tut mir leid. Ich werde es reparieren. – Ash