C# 林克加入一个小组

C# 林克加入一个小组,c#,linq,entity-framework,C#,Linq,Entity Framework,好的,我正在尝试将以下SQL查询复制到Linq表达式中: SELECT I.EmployeeNumber, E.TITLE, E.FNAM, E.LNAM FROM Incidents I INNER JOIN Employees E ON I.IncidentEmployee = E.EmployeeNumber GROUP BY I.EmployeeNumber, E.TITLE, E.FNAM, E.LNAM 很

好的,我正在尝试将以下SQL查询复制到Linq表达式中:

SELECT
    I.EmployeeNumber,
    E.TITLE,
    E.FNAM, 
    E.LNAM
FROM
    Incidents I INNER JOIN Employees E ON I.IncidentEmployee = E.EmployeeNumber
GROUP BY
    I.EmployeeNumber,
    E.TITLE,
    E.FNAM, 
    E.LNAM
很简单(或者至少我认为):

但我没有返回我导出的结果,因此我启动SQL Profiler,查看通过管道发送到SQL Server的内容,这就是我看到的:

SELECT 
[GroupBy1].[A1] AS [C1]
FROM ( SELECT 
    COUNT(1) AS [A1]
    FROM ( SELECT DISTINCT 
        [Extent2].[IncidentEmployee] AS [IncidentEmployee], 
        [Extent1].[TITLE] AS [TITLE], 
        [Extent1].[FNAM] AS [FNAM], 
        [Extent1].[LNAM] AS [LNAM]
        FROM  [dbo].[Employees] AS [Extent1]
        INNER JOIN [dbo].[INCIDENTS] AS [Extent2] ON ([Extent1].[EmployeeNumber] = [Extent2].[IncidentEmployee]) OR (([Extent1].[EmployeeNumber] IS NULL) AND ([Extent2].[IncidentEmployee] IS NULL))
    )  AS [Distinct1]
)  AS [GroupBy1]
从发送到SQL Server的SQL字符串中可以看到,Select子句中没有包含我希望返回的字段。我做错了什么

更新

这是漫长的一天,我再次运行了代码,现在这是正在发送的SQL:

SELECT 
[Distinct1].[IncidentEmployee] AS [IncidentEmployee], 
[Distinct1].[TITLE] AS [TITLE], 
[Distinct1].[FNAM] AS [FNAM], 
[Distinct1].[LNAM] AS [LNAM]
FROM ( SELECT DISTINCT 
    [Extent1].[OFFNUM] AS [OFFNUM], 
    [Extent1].[TITLE] AS [TITLE], 
    [Extent1].[FNAM] AS [FNAM], 
    [Extent1].[LNAM] AS [LNAM]
    FROM  [dbo].[Employees] AS [Extent1]
    INNER JOIN [dbo].[INCIDENTS] AS [Extent2] ON ([Extent1].[EmployeeNumber] = [Extent2].[IncidentEmployee]) OR (([Extent1].[EmployeeNumber] IS NULL) AND ([Extent2].[IncidentEmployee] IS NULL))
)  AS [Distinct1]
但是,当我尝试循环记录集时,我仍然没有看到结果

foreach (var emps in query)
{

}

我不知道为什么查询没有返回它应该返回的内容,但我突然想到,由于您只查询组键,而没有查询任何分组结果,所以除了一个
Distinct()

但EF也很聪明地看到了这一点,并创建了一个独特的查询

您没有指定预期的结果以及实际结果的不同方式,但我真的看不出分组如何产生与
不同的结果


但是你的代码是如何编译的呢?正如xeondev所注意到的:在join语句中应该有一个
equals
,而不是
=
。否则,我的编译器(:D)不会接受它。生成的SQL联接也很奇怪:它还匹配两个联接值都为NULL的记录。这使我怀疑至少有一个键(
i.IncidentEmployee
e.EmployeeNumber
)是可为空的,您应该使用
i.IncidentEmployee.Value
e.EmployeeNumber.Value
或两者都使用。

您尝试过添加
ToArray()
?看起来你只是没有列举这些项目。我只是尝试了一下,但仍然没有得到任何结果。当我从SQL Profiler运行原始查询字符串和SQL字符串时,我得到了预期的结果。因此,我的Linq查询一定有问题。正如我所知,Linq join应该是这样的“join I in contextDB.incents on I.IncidentEmployee equals e.EmployeeNumber”注意“equals”而不是“=”
foreach (var emps in query)
{

}
var query =
(from e in contextDB.Employees
 join i in contextDB.Incidents on i.IncidentEmployee equals e.EmployeeNumber
 select new
 {
     IncEmpNum = i.IncidentEmployee
     TITLE = e.TITLE,
     USERFNAM = e.FNAM,
     USERLNAM = e.LNAM
 }).Distinct();