Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用;让我们;使用EF 4.3的LINQ查询中的kewword_C#_.net_Linq_Entity Framework_Let - Fatal编程技术网

C# 使用;让我们;使用EF 4.3的LINQ查询中的kewword

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

我有一个简单的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()。这是设计中的一个错误,我现在必须处理它。所以我只想要第一个。

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}?