[英]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.