【发布时间】: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