C# 使用;让我们;使用EF 4.3的LINQ查询中的kewword
我有一个简单的LINQ问题,我无法解决。 我有一个表C# 使用;让我们;使用EF 4.3的LINQ查询中的kewword,c#,.net,linq,entity-framework,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 };
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()。这是设计中的一个错误,我现在必须处理它。所以我只想要第一个。
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 };
只是一个没有测试的TIp。
第一个可以使用,除非在LINQ可查询语句的中间,当将语句翻译成SQL Teres时,实际上无法构成第一个,因为它的行为是抛出一个错误。但是,FirstOrDefault可以转换为Top(1),这就是它转换为SQL的方式。这意味着在SQL可译语句的中间使用第一次并不是真的有效,但是我相信他们已经把它作为最后的语句,因为零结果可以翻译成异常后查询执行。您能帮助我理解问题中的上林克查询有什么问题吗。你的问题和我的问题似乎是一样的。我认为“let”条款是没有必要的。否则,您编写的代码与:select new{UserId=u.UsrId,FirstName=u.Employees.FirstOrDefault(x=>x.bossId==u.UsrId).FirstName}?