C# 在联接表上使用Lambda GroupBy的实体框架6

C# 在联接表上使用Lambda GroupBy的实体框架6,c#,entity-framework,lambda,C#,Entity Framework,Lambda,我有两个表,Drivers和ViewDrivers,我在Entity Framework 6中使用以下lambda表达式将它们连接在一起 var inAppDriverList = context.ViewDrivers .Select(dv => new { dv.TerminalCode, dv.EmployeeId }) .Join( context.Drivers, d => d.EmployeeId, dv =&g

我有两个表,
Drivers
ViewDrivers
,我在Entity Framework 6中使用以下lambda表达式将它们连接在一起

var inAppDriverList = context.ViewDrivers
.Select(dv => new { dv.TerminalCode, dv.EmployeeId })
.Join(
          context.Drivers,
          d => d.EmployeeId,
          dv => dv.EmployeeId,
          (d, dv) => new { d, dv }
      ))
.OrderBy(dv => dv.TerminalCode)
.GroupBy(dv => dv.TerminalCode
.ToList();
它确实提供了我希望获得的数据,但当我尝试使用
GroupBy
OrderBy
按终端代码对列表进行排序和分组时,我无法使其正常工作。我已经尝试了我能想到的一切,但没有运气


我只是在尝试对联接表进行排序时遇到了这个问题,所以我猜我遗漏了一些小的内容。如果您能帮助我按照
ternalcode
字段对这些语句进行分组和排序,我将不胜感激

您的
加入的结果将是您创建的匿名类的序列

(d, dv) => new { d, dv }
所以,当你尝试订购和分组时,你需要一个类似的lambda

x => x.dv.TerminalCode
在匿名类中指定
dv
的值

(d, dv) => new { d, dv.TerminalCode, dv.EmployeeId  }

有了这个选项,您就不需要在加入
之前选择
。此外,如果您不需要
驱动程序中的所有列,您也可以指定它们,从而减少查询必须返回的数据量。

您的
加入的结果将是您创建的匿名类的序列

(d, dv) => new { d, dv }
所以,当你尝试订购和分组时,你需要一个类似的lambda

x => x.dv.TerminalCode
在匿名类中指定
dv
的值

(d, dv) => new { d, dv.TerminalCode, dv.EmployeeId  }

有了这个选项,您就不需要在加入
之前选择
。此外,如果您不需要
驱动程序中的所有列,也可以指定它们,从而减少查询必须返回的数据量。

这不应该是
x=>x.dv.TerminalCode
而不是
dv.TerminalCode
,因为您的
Join
正在使用
dv
d
作为属性?juhar-就是这样。。。。非常感谢你。请将此作为答案发布,我将选择它。这不应该是
x=>x.dv.TerminalCode
而不是
dv.TerminalCode
,因为您的
Join
正在创建一个以
dv
d
作为属性的匿名类吗?juhar-就是这样。。。。非常感谢你。请将此作为答案发布,我将选择它。