动态Linq将LIKE添加到where子句

时间:2014-05-09 19:14:11

标签: linq entity-framework dynamic-linq

我试图在实体查询中执行LIKE子句。 examples我见过使用动态linq做这种事情,但我的代码......

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

...给我一个带有

的System.Linq.Dynamic.ParseException
Additional information: Expression of type 'Boolean' expected

context 是来自EF 6代码优先的DbContext, patientName 是一个字符串

请告诉我我的代码有什么问题?

3 个答案:

答案 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));