【问题标题】:How to get list of an entity with generic search如何使用通用搜索获取实体列表
【发布时间】:2017-04-01 18:54:38
【问题描述】:

我有一个通用存储库,如下所示:

    public IEnumerable<T> SelectAll()
    {
        return table.ToList();
    }

    public T SelectByID(object id)
    {
        return table.Find(id);
    }

    public void Insert(T obj)
    {
        table.Add(obj);
    }

这适用于基本的 CRUD,但现在我需要根据用户输入的搜索词搜索实体(表)。是否可以通过以下方式做到这一点:

public IEnumerable<T> SelectAll(T obj, string searchText, string   columnName)
{
    // I am not sure what code to write here... It should give me all the records that contain the search term.
    // I was thinking something like this could be made to work...but I need help with it.
    return table.GetType().GetProperty(columnName).GetValue())ToList();
}

【问题讨论】:

  • 使用动态 Linq。

标签: c# linq generics repository


【解决方案1】:

使用 Lambda 表达式作为参数

public virtual async Task<List<T>> SearchBy(Expression<Func<Table, bool>> searchBy)
{
    return await _ctx.Set<Table>().Where(searchBy).ToListAsync();
}

这样,您将使用返回布尔值的表表达式参数调用搜索

【讨论】:

  • 列名在哪里? searchBy 是 searchText 吧?
  • 你会这样调用方法:SearchBy(i => i.ColumnName == searchText);
  • +表格是您正在搜索的对象/模型...例如,电影、书籍等
  • 不起作用,我在列表中一无所获。除了实际的搜索字符串之外,我在 searchText 中得到了一大堆东西。
【解决方案2】:

这是我现在使用的:

        public IEnumerable<T> SelectAll(Expression<Func<T, bool>> predicate)
    {
        IEnumerable<T> searchResult = context.Set<T>().Where(predicate);
        return searchResult;
    }

以及方法调用:

 var lstResult = objRepo.SelectAll(x=>x.ColumnName.Contains(searchText));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多