我正在寻找使用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
个查询。所以我无法使用Dynamic LINQ
答案 0 :(得分:1)
动态Linq?可能不是
我打算建议Dynamic Linq,但是你的“编辑”声明不适合你。
在这种情况下,我会说你的问题的答案是“没有最好的办法”。
Linq是最好的选择吗?
您的问题是要求Linq,特别是Linq to Sql,实现如何实现动态查询。
但请考虑Linq to Sql的用途。 Linq to SQL的主要好处是:
现在,如果您正在执行“Select”语句并始终返回实际的映射表,那么您就没有理由不能使用动态Linq库。
但是如果你正在返回任意非映射结果,那么使用LINQ没有意义,事实上它不会让你。
DataContext.ExecuteQuery<T>(string query)
DataContext
类确实有ExecuteQuery<T>
方法,但不幸的是you cannot return specify dynamic as the T :-(
Linq to SQL和存储过程
最后,LINQ to SQL可以映射到存储过程。因此,您可以拥有一个将查询作为参数的存储过程,就像您的示例一样。但是,我认为它在{* 1}}中可以得到与ExecuteQuery
相同的限制,但是不要让我这样做。
我将把它作为您的最终选项,并在Linq to SQL设计器中探索返回匿名,动态或映射类型的sproc。