我有简单的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()
我不确定使用是否正确。我认为这是针对子查询的。
First()
调用的原因是Employees表不应为每个用户提供多个条目。这是设计中的一个错误,我现在必须处理它。所以我只想要第一个。
答案 0 :(得分: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 };
没有经过测试,只是一个tipp。
答案 1 :(得分:1)
首先可以使用,除了在LINQ查询语句的中间,当将该语句转换为SQL时,实际上没有办法构成First,因为它的行为是抛出错误。然而,FirstOrDefault可以转换为Top(1),这是它转换为SQL的方式。这意味着在SQL可翻译语句的中间首先使用并不是真的有效,但是我相信他们已经允许这作为最后一个语句,因为零结果可以转换为查询执行后的异常。