/ / Dynamic Linq per aggiungere LIKE alla clausola where - linq, entity-framework, dynamic-linq

Linq dinamico per aggiungere LIKE alla clausola where - linq, entity-framework, dynamic-linq

Sto cercando di eseguire una clausola LIKE in una query di entità esempi Ho visto usare linq dinamico per fare questo genere di cose, ma il mio codice ...

var query = context.StudySet
.Where("it.PatientName LIKE @patientName", new ObjectParameter("patientName", patientName);

... mi dà un System.Linq.Dynamic.ParseException con

Additional information: Expression of type "Boolean" expected

contesto è un DbContext di EF 6 code-first, nome paziente è una stringa

Per favore dimmi cosa c'è di sbagliato nel mio codice?

risposte:

3 per risposta № 1

se vuoi usare DynamicLINQ devi cambiare il tuo codice in questo modo

var query = context.StudySet.Where("it.PatientName.Contains(@0)", patientName);

perché DynamicLinq non può essere analizzato LIKE operatore


2 per risposta № 2

Ho capito il mio errore.

Avevo pensato che il metodo per passare la query fosseparte di Dynamic Linq ma in realtà è solo una variante del metodo Where standard su ObjectQuery. Se ottengo ObjectContext dal mio (codice prima) DbContext è tutto ok.

ObjectContext objectContext = ((IObjectContextAdapter)context).ObjectContext;
ObjectSet<Study> studySet = objectContext.CreateObjectSet<Study>();

var query = studySet.
Where("it.PatientName LIKE @patientName", new ObjectParameter("patientName", patientName));

0 per risposta № 3

Non conosco un modo per utilizzare come con una query LINQ, ma potresti utilizzare una query SQL non elaborata:

var query = context.StudySet.SqlQuery(
"select * from StudySet where PatientName LIKE @patientName",
new SqlParameter("@patientName", patientName));