2015-01-16 46 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