我有一个网页,用户可以通过点击一组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的东西?
答案 0 :(得分:0)
利用Dynamiclinqlibrary或Predicatebuilder将解决您面临的问题
查找approch的示例:Dynamic query with Linq
代码的其他问题是您使用IEnumerable,当您从数据库,xmlfile等数据源获取数据时,它会使用IQuerable。
主要区别在于IEnumerable将枚举所有元素,而IQueryable将枚举元素,甚至根据查询执行其他操作。如果IQueryable Linq Query被IQueryProvider使用,必须解释或编译才能获得结果。
阅读示例:IQueryable Vs. IEnumerable in terms of LINQ to SQL queries