【问题标题】:View not translating across to LINQ properly查看未正确转换为 LINQ
【发布时间】:2012-04-25 13:47:58
【问题描述】:

在使用 ASP .Net(MVC Unity 框架)时遇到了一个真正奇怪的问题。我的观点如下(在这个例子中已经简化了):

CREATE VIEW [dbo].[V_eSummary] AS
SELECT a.ID,
a.Domain
FROM [Table1] a
GROUP BY a.ID,
a.Domain

基础表具有重复值,因此分组以获得不同的值。

在 .Net 中,我有以下 LINQ 查询:

var eSummary = from s in ctx.V_eSummary
                              select s;

而不是看到(如在 SQL 中运行视图时显示的那样):

ID       Domain
206080   .hello.com
206080   .this.com
206080   www.hello.com
206080   .www.hello.com
206080   .hello.zettaneer.com

我明白了:

ID       Domain
206080   .hello.com
206080   .hello.com
206080   .hello.com
206080   .hello.com
206080   .hello.com

使用 SQL 分析器,似乎正在执行正确的查询。然而,无论出于何种原因,它都会在 .Net 中带来不正确的值。

非常感谢任何建议。


根据要求,这是来自 SQL 分析器的代码。直接在服务器上运行它会产生正确的结果。 :S

 SELECT 
 [Extent1].[ID] AS [ID], 
 [Extent1].[Domain] AS [Domain]
 FROM (SELECT 
     [V_eSummary].[ID] AS [ID], 
     [V_eSummary].[Domain] AS [Domain]
     FROM [dbo].[V_eSummary] AS [V_eSummary]) AS [Extent1]

【问题讨论】:

  • 经典 asp 不是 ASP.NET。
  • 您如何查看 eSummary 的内容?通过调试器,或者您是否有代码迭代它?如果是代码,我们可以看到您正在使用的代码吗?无意冒犯,但看起来你的 .NET 代码错误比 Linq 搞砸了这么简单的查询更有可能。
  • 请发布视图使用的确切 SQL 代码。
  • 我认为 .NET 代码的其余部分会很有用。
  • @AnnL。对于上面发布的示例,我使用的是调试器,但我使用的代码是 for 循环:foreach (var c in eSummary { eModel m = new eModel(); m.ID = c.ID; m.域 = c.Domain; }

标签: asp.net .net sql sql-server linq


【解决方案1】:

这不是 .NET 的问题。执行您在 SSMS 中捕获的确切查询。结果很可能是一样的。

确保在正确的数据库上执行此操作。

【讨论】:

  • 从 SQL 探查器中提取的查询见上文。结果肯定是不同的。
  • 这个错误是如何工作的?我们谈论的是在经过 10 年战争强化的代码路径上执行的正常查询。不太可能。你能设计一个完整的可执行复制吗?带有 .sql 文件的小型控制台应用程序可以创建必要的架构?我的猜测是你会在这个过程中自己发现这个错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-23
相关资源
最近更新 更多