【发布时间】:2013-10-30 01:09:52
【问题描述】:
我用
`.....
.....
query = query.Where(criterion, fiedNames);
string sql2 = ((ObjectQuery)query).ToTraceString();'
获取和调整将由 LINQ 执行的 SQL 代码。
当我快速观看时,我得到以下我不理解的 SQL 语句。
SELECT [UnionAll2].[C3] AS [C1], [UnionAll2].[C4] AS [C2],
[UnionAll2].[C5] AS [C3], [UnionAll2].[C6] AS [C4],
[UnionAll2].[C7] AS [C5],
[UnionAll2].[C8] AS [C6],
[UnionAll2].[C9] AS [C7],
..... few hundereds line more.....
@p__linq__4 AS [C2],
.....
CASE
WHEN ( [Join5].[id] IS NULL ) THEN
Cast(NULL AS INT)
WHEN ( @p__linq__0 = 1 )
.......
显然,如果我粘贴到 SQL 管理工作室并执行,如果我没有传递 @p__linq__0.... 的值,它会抛出错误。
我的问题:如何获取可以在 SQL 管理上执行的跟踪 SQL?
【问题讨论】:
-
实际上,您的示例对我来说看起来像是有效的 SQL。显然
@p__linq__4的东西必须在一个 SP 参数中传递,但除此之外,这一切看起来完全合法。 (丑吗?是的,这是您在使用 ORM 时所做的权衡)另外,实际的 SQL 错误是什么? -
我在 SQL 中没有收到任何错误,除了我必须传递这些参数(我不知道),所以有没有办法或需要调整才能不生成
@p___linq___0?我的 api 在不提供参数的情况下渲染数据,这些参数是可选的。 -
我要问的是,当您尝试在 SSMS 中执行 SQL 时,您得到了什么错误(即“它会抛出错误”)?
-
我会更正我在帖子中所说的话,但我想说的是,如果我只是复制并粘贴 sql 含义而不传递参数,它会引发错误。
-
对!但那是什么错误!? :)
标签: c# linq entity-framework lambda linq-to-entities