5

我有一个我无法弄清楚的简单 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() 只能出现在 a 的末尾select。同样不起作用的是在以前的查询中选择员工,如下所示:

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

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

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

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

4

2 回答 2

4
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 }; 

只是未经测试的小费。

于 2012-02-28T10:17:03.133 回答
1

除了在 LINQ 可查询语句的中间之外,可以使用 First,当将该语句转换为 SQL 时,实际上没有办法构成 First,因为它的行为是抛出错误。然而,FirstOrDefault 可以转换为 Top(1),这就是它转换为 SQL 的方式。这意味着在 SQL 可翻译语句的中间使用 first 并不是真的有效,但是我相信他们已经允许它作为最后一条语句,因为零结果可以转换为异常后查询执行。

于 2012-02-28T10:17:51.527 回答