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 № 1se 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));