簡體   English   中英

用Linq或Expression Tree編寫具有動態結果的動態查詢的最佳方法

[英]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. 使用LINQ或表達式樹對此進行編碼
  2. 使用LINQ to SQL將其作為存儲過程進行調用

編輯1)

考慮每個動態查詢都不包含SELECT語句。例如,我最近編寫了一個動態PIVOT查詢,因此我不能使用動態LINQ

動態的Linq? 可能不是

我本來建議使用Dynamic Linq,但由於您的“編輯”狀態對您沒有幫助。

在這種情況下,我會說您的問題的答案是“沒有最好的方法”。

Linq是此的最佳選擇嗎?

您的問題是要尋求有關如何實現動態查詢的Linq(尤其是SQL的Linq)實現。

但是考慮一下Linq to Sql的用途。 Linq to SQL的主要優點是:

  1. 強類型查詢(在編譯時捕獲錯誤)
  2. 強類型結果。 好的預寫類的含義(在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM