C# LINQ查询表达式中的子查询
下面是我的sql查询:C# LINQ查询表达式中的子查询,c#,linq,C#,Linq,下面是我的sql查询: select e.id, m.id, e.Name, (select 1 where e.Id Is Null) as NotExists from Employee e INNER JOIN Department d ON e.Id = d.Id LEFT JOIN Manager m ON e.Id = m.Id order by
select e.id, m.id, e.Name, (select 1 where e.Id Is Null) as NotExists
from Employee e
INNER JOIN Department d
ON e.Id = d.Id
LEFT JOIN Manager m
ON e.Id = m.Id
order by e.Name
我试图将上述查询写入LINQ,如下所示:
var result = from e in employeeRep
join d in departmentRep
on e.Id equals d.Id
join m in manager
on e.Id = m.Id
order by e.Name
select new
{
Name = e.Name,
EmpId = e.Id,
ManagerId = m.Id,
DepartmentId = d.Id,
DeparmentName = d.Name,
NotExists = // here I want to write this query (select 1 where e.Id Is Null) as NotExists
} ;
有人能告诉我如何做到这一点吗
谢谢如果Id可为空,则可以执行以下操作:
select new
{
Name = e.Name,
EmpId = e.Id,
ManagerId = m.Id,
DepartmentId = d.Id,
DeparmentName = d.Name,
NotExists = e.Id == null ? 1 : 0
}
您可以使用let关键字。它允许您创建子查询,为它们指定名称,然后在以后的代码中使用它们。虽然,它在更复杂的子查询中更有用,但在这里它也可以工作
var result = from e in employeeRep
join d in departmentRep
on e.Id equals d.Id
join m in manager
on e.Id = m.Id
order by e.Name
let mySub = // write your query here.
select new
{
Name = e.Name,
EmpId = e.Id,
ManagerId = m.Id,
DepartmentId = d.Id,
DeparmentName = d.Name,
NotExists = mySub
};
我不确定这一点,因为我从来没有尝试过,我一定会尝试,看看它是否解决了我的问题。无论如何,我承认,如果你只想在ID为null时分配一个数字,那么这个解决方案有点过分了。我添加它是为了防止您或其他人希望在LINQ查询中检索更复杂的内容。不过,它也可以应用于您的问题。谢谢您的回复