如何在c#中构建动态linq到sql查询?

时间:2015-01-16 08:38:52

标签: c# asp.net linq

我有一个网页,用户可以通过点击一组DropDownList来指定他们的查询。现在我想根据用户的输入构建我的SQL查询。我使用System.Linq.Expressions来做到这一点。

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到sql中是否有类似于System.Linq.Expressions的东西?

1 个答案:

答案 0 :(得分:0)

利用DynamiclinqlibraryPredicatebuilder将解决您面临的问题

查找approch的示例:Dynamic query with Linq


代码的其他问题是您使用IEnumerable,当您从数据库,xmlfile等数据源获取数据时,它会使用IQuerable。

主要区别在于IEnumerable将枚举所有元素,而IQueryable将枚举元素,甚至根据查询执行其他操作。如果IQueryable Linq Query被IQueryProvider使用,必须解释或编译才能获得结果。

阅读示例:IQueryable Vs. IEnumerable in terms of LINQ to SQL queries