我试图在实体查询中执行LIKE子句。 examples我见过使用动态linq做这种事情,但我的代码......
var query = context.StudySet
.Where("it.PatientName LIKE @patientName", new ObjectParameter("patientName", patientName);
...给我一个带有
的System.Linq.Dynamic.ParseExceptionAdditional information: Expression of type 'Boolean' expected
context 是来自EF 6代码优先的DbContext, patientName 是一个字符串
请告诉我我的代码有什么问题?
答案 0 :(得分:4)
如果你想使用DynamicLINQ,你需要像这样改变你的代码
var query = context.StudySet.Where("it.PatientName.Contains(@0)", patientName);
因为DynamicLinq无法解析LIKE
运算符
答案 1 :(得分:2)
我意识到自己的错误。
我假设传递查询的方法是Dynamic Linq的一部分,但实际上它只是ObjectQuery上标准Where方法的变体。如果我从我的(代码优先)DbContext获取ObjectContext,那一切都很好。
ObjectContext objectContext = ((IObjectContextAdapter)context).ObjectContext;
ObjectSet<Study> studySet = objectContext.CreateObjectSet<Study>();
var query = studySet.
Where("it.PatientName LIKE @patientName", new ObjectParameter("patientName", patientName));
答案 2 :(得分:0)
我不知道如何使用LINQ查询,但您可以使用原始SQL查询:
var query = context.StudySet.SqlQuery(
"select * from StudySet where PatientName LIKE @patientName",
new SqlParameter("@patientName", patientName));