[英]Best way to write Dynamic Query with dynamic result with Linq or Expression Tree
我正在尋找用LINQ或表達式樹編寫查詢以根據動態輸入返回動態結果的最佳方法。 例如,考慮以下偽代碼:
CREATE PROCEDURE Test
@Input NVARCHAR(50)
AS
BEGIN
DECLARE @Query NVARCHAR(100);
SET @Query=N'SELECT ' + @Input + ' FROM MyTable'
EXEC @Query
END
最好的方法是:
編輯1)
考慮每個動態查詢都不包含SELECT
語句。例如,我最近編寫了一個動態PIVOT
查詢,因此我不能使用動態LINQ
動態的Linq? 可能不是
我本來建議使用Dynamic Linq,但由於您的“編輯”狀態對您沒有幫助。
在這種情況下,我會說您的問題的答案是“沒有最好的方法”。
Linq是此的最佳選擇嗎?
您的問題是要尋求有關如何實現動態查詢的Linq(尤其是SQL的Linq)實現。
但是考慮一下Linq to Sql的用途。 Linq to SQL的主要優點是:
現在,如果您正在執行“選擇”語句並始終返回實際的映射表,那么就沒有理由不能使用動態Linq庫。
但是,如果您要返回任意的非映射結果,則使用LINQ是沒有意義的,的確不會。
DataContext.ExecuteQuery<T>(string query)
DataContext
類確實具有ExecuteQuery<T>
方法,但是不幸的是, 您不能將指定動態返回為T :-(
Linq to SQL和存儲過程
最后,LINQ to SQL可以映射到存儲過程。 因此,您可以有一個將查詢作為參數的存儲過程,例如您的示例。 但是,我相信ExecuteQuery
在可能產生的類型方面具有相同的局限性,盡管不要讓我堅持。
我將把它作為最后的選擇,並探索Linq to SQL設計器中的存儲庫,該存儲庫返回匿名,動態或映射類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.