簡體   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