繁体   English   中英

如何在C#中为SQL查询创建动态linq?

[英]How to build dynamic linq to sql query in c#?

我有一个网页,用户可以通过单击一组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 to sql中是否有与System.Linq.Expressions等效的东西?

利用DynamiclinqlibraryPredicatebuilder可以解决您面临的问题

查找两个方法的示例: 使用Linq进行动态查询


代码的另一个问题是您使用了IEnumerable,当您从数据库,xmlfile等数据源获取数据时,它使用了IQuerable。

主要区别在于IEnumerable将枚举所有元素,而IQueryable将枚举元素,甚至基于查询执行其他操作。 在使用IQueryable Linq的情况下,IQueryProvider会使用Query,IQueryProvider必须对其进行解释或编译才能获取结果。

阅读示例: IQueryable与。 IEnumerable在LINQ to SQL查询方面

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM