[英]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等效的东西?
利用Dynamiclinqlibrary或Predicatebuilder可以解决您面临的问题
查找两个方法的示例: 使用Linq进行动态查询
代码的另一个问题是您使用了IEnumerable,当您从数据库,xmlfile等数据源获取数据时,它使用了IQuerable。
主要区别在于IEnumerable将枚举所有元素,而IQueryable将枚举元素,甚至基于查询执行其他操作。 在使用IQueryable Linq的情况下,IQueryProvider会使用Query,IQueryProvider必须对其进行解释或编译才能获取结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.