2017-04-01 51 views
1

我有一個通用的存儲庫,像這樣:如何獲得一個實體的名單與通用搜索

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,但現在我需要尋找對一個實體(表)用戶輸入了searchterm。它是在所有可能的東西像這樣做:

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(); 
} 
+0

使用動態Linq。 –

回答

0

這是我在用的現在:

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

使用lambda表達式作爲參數

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

這一點,你會要求有一個表表達式參數搜索返回boolen

+0

這裏是列名嗎? searchBy是searchText,對吧? – adityawho

+0

你會調用這樣的方法:SearchBy(i => i.ColumnName == searchText); – McKabue

+0

好的,這是什麼表? – adityawho

相關問題