2015-01-16 50 views
1

我有一個網頁,用戶可以通過點擊一組DropDownList來指定他們的查詢。現在我想建立我的SQL查詢基於用戶的輸入。我用System.Linq.Expressions來做到這一點。如何在c#中建立動態LINQ到sql查詢?

public static IEnumerable<T> FilterTable<T>(List<Filter> filters, Table<T> table) where T : class 
    { 
     int top; 
     IEnumerable<T> query; 
     if (filters == null || filters.Count == 0) 
     { 
      query = table; 
     } 
     else 
     { 
      Func<T, bool> lamda = Build<T>(filters, out top); 
      if (top > 0) 
      { 
       query = table.Where(lamda).Take(top); 
      } 
      else 
      { 
       query = table.Where(lamda); 
      } 
     } 
     return query; 
    } 

這種方法確實有效。但是,由於IIS首先從數據庫服務器獲取所有數據,然後應用where子句,所以速度很慢。所以IIS服務器和數據庫服務器之間可能會有許多不必要的開銷。

那麼,有沒有更好的方法來做到這一點?在LINQ to sql中是否有與System.Linq.Expressions等價的東西?

回答

0

利用DynamiclinqlibraryPredicatebuilder會解決問題,你所面臨的

查找例如兩種計算策略:Dynamic query with Linq


與你的其他問題的代碼是你使用的IEnumerable,insted的它的使用IQuerable時你正在從數據源如數據庫,xmlfile等獲取數據。

主要區別在於IEnumerable將枚舉所有元素,而IQueryable將e計算元素,甚至根據查詢做其他事情。如果IQueryable Linq Query被IQueryProvider使用,它必須解釋或編譯以獲得結果。

閱讀並使用示例:IQueryable Vs. IEnumerable in terms of LINQ to SQL queries

+0

感謝您的快速響應。我會檢查鏈接,稍後再回來 – ricky