c# - 在 EF 4.3 的 LINQ 查询中使用 "let"关键字

标签 c# .net linq entity-framework let

我有一个无法解决的简单 LINQ 问题。 我有一个表 Users 和一个表 Employees一个用户可以有 0...n 名员工。

我想做这样的事情:

var result = from u in context.users
             where u.UsrId = 2
             let e = u.Employees.First()
             select new 
{
  UserId = u.UsrId,
  FirstName = e.FirstName
};

这当然行不通,因为 First() 调用是非法的。 First() 只能出现在 select 的末尾。 同样不起作用的是在之前的查询中选择员工,如下所示:

var employee = from e. in context.Employees.....

...然后说 let e = employee 而不是 let e = u.Employees().First()

我不确定 let 的使用是否正确。我认为它是用于子查询。

First() 调用的原因是 Employees 表中每个用户的条目不应超过一个。那是设计中的错误,我现在必须处理它。所以我只想要第一个。

最佳答案

var result = from u in context.users
let e = u.Employees.FirstOrDefault(x => x.bossId == u.UsrId)
where u.UsrId = 2
select new  {   UserId = u.UsrId,   FirstName = e.FirstName }; 

只是未经测试的提示。

关于c# - 在 EF 4.3 的 LINQ 查询中使用 "let"关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9480023/

相关文章:

c# - 有没有一种简单的方法来附加 lambda 并重用 lambda 名称以创建我的 Linq where 条件?

c# - 日期数组,检查日期是否存在

c# - Linq To Sql 和 identity_insert

c# - 调试 com 可见 dll 托管代码

c# - 使用静态构造函数时 Visual Studio 的智能感知中断

c# - 在 LineSeries WinForms 图表中显示工具提示?

c# - 必须不可为空才能用作参数 'T'

c# - JObject 嵌套属性

c# - 在 "delegate"中记录每个方法

c# - 如何选择具有最高属性 A 值的对象,按属性 B 分组?