3

我正在编写实现关键字样式搜索的 LINQ 查询。换句话说,一个查询返回其Title, Description,Id包含的行

如下

    public static IQueryable<EmployeeObject> QueryableSQL()
    {
        IQueryable<EmployeeObject> queryable = EmployeeRepository.GetAllEmployee(); 
    }

    public static IList<EmployeeObject> QLike(string txt)
    {
       IList<employeeObject> _emps = QueryableSQL().Where(x => x.Title == txt).ToList();
       return _emps;
    }

到目前为止,一切都很好。但这仅处理您想在我的情况下匹配的情况Title

假设相反,我想根据“描述orIDshould i have to create a new method for Description? or is there a way i can create a树表达式”进行搜索

4

3 回答 3

3
public static IQueryable<EmployeeObject> QueryableSQL()
{
    IQueryable<MediaObject> queryable = EmployeeRepository.GetAllEmployee(); 
}

public static IList<EmployeeObject> QLike(Expression<Func<EmployeeObject, bool>> func)
{
   return QueryableSQL().Where(func).ToList();
}

然后你可以这样称呼它:

QLike(t => t.Title == "MyText");
于 2013-10-28T17:29:00.033 回答
2

听起来您想要通过动态比较的属性,您可以使用反射来执行此操作:

public static IList<EmployeeObject> QLike(string propName, string txt)
{
   PropertyInfo filterProp = typeof(EmployeeObject).GetProperty(propName);
   IList<employeeObject> _emps = QueryableSQL().Where(x => filterProp.GetValue(x, null).ToString() == txt).ToList();
   return _emps;
}

然而,这种方法的缺点是您最终会从数据库中加载所有对象,然后在代码中过滤它们。

如果您遵循@glen 显示的方法,那么 Ling to SQL 提供将能够在生成的 SQL 语句中进行过滤。在这种情况下,您确实需要预先对谓词进行编码,并根据您要调用的属性调用适当的谓词。

于 2013-10-28T17:34:16.347 回答
2

你看过动态 Linq吗?也就是说,当然,如果此文本可能是用户提供的而不是编译的。

于 2013-10-28T17:27:16.563 回答