【问题标题】:LINQ to SQL returns wrong resultsLINQ to SQL 返回错误的结果
【发布时间】:2011-07-31 11:36:03
【问题描述】:

我一整天都在尝试解决这个问题.. :-(

我正在使用 C# 和 MSSQL 并通过 LINQ 进行查询

我有一个存储在studWithTuiDisc 变量中的集合,它包含以下数据(如下链接所示)


(来源:secompeusc.com

当使用此变量作为其他 LINQ 语句的参考时,结果非常不正确,在这篇文章之前,我进行了实验以检查返回不正确的结果是否真的不是我的错:

(1) 我尝试遍历 studWithTuiDisc,然后仅检查 select clause 中的关系,因为我确信这将返回所需的输出(见下文)
代码:

var xxx = (from a in studWithTuiDisc  
           select new 
           { 
             please = a.StudentId, 
             help = _conn.EEnrolledSubjects
                    .Where(m => m.StudentId == a.StudentId)
                    .Select(m => m.StudentId)
                    .FirstOrDefault() 
           }).Distinct();

输出:

(来源:secompeusc.com

我们可以看到studWithTuiDisc 值是xxx 中包含的唯一值

(2) 现在我尝试了让我很头疼的方法(见下文)
代码:

var zzz = (from a in studWithTuiDisc
           join b in _conn.EEnrolledSubjects on a.StudentId equals b.StudentId
           select new { please = a.StudentId, help = b.StudentId }).Distinct();

var zzz = (from a in studWithTuiDisc
           from b in _conn.EEnrolledSubjects
           where a.StudentId == b.StudentId
           select new { please = a.StudentId, help = b.StudentId }).Distinct();

输出:

(来源:secompeusc.com

鉴于我们已经知道 studWithTuiDisc 中的值,并且由于我们将其用作 _conn.EEnrolledSubjects 的过滤器,我们应该期待 studWithTuiDisc 中的结果,但查看屏幕截图,LINQ 没有返回正确的结果。

我做错了什么?
有没有人经历过这样的事情?
有谁知道为什么会这样?

【问题讨论】:

  • 写下来格式化代码和输出可能比发布一些屏幕截图更好?
  • 天啊,我发现这个奇怪的命名很难阅读查询。 “Stud with Tui Disc”?!?
  • @abatishchev 是直接取自程序的实际代码
  • 您是否覆盖了实体对象上的 Equals?
  • @Phill 对不起,它是学生学费折扣的缩写

标签: c# .net linq linq-to-sql


【解决方案1】:

使用DataContext.Log 或 SQL Profiler 检查生成/发送到 SQL Server 的内容。我认为您的查询会有所不同。

【讨论】:

  • 对不起,我没有解释输出:它是正确的,应该是新的 { please = a.StudentId, help = b.StudentId }。 please --> 代表来自 studWithTuiDisc 的 StudentId。 help ----> 代表来自_conn.EEnrolledSubjects 的StudentId 这里的主题真的是为什么StudWithTuiDisc 中没有StudentId 出现在结果中
  • @LINQ Newbee:你可以使用波浪号来高亮code in comments
  • 是的,它显示了一个相当奇怪的生成 SQL,现在我可以从这里获取它。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
相关资源
最近更新 更多