C# Linq与SQL的Lambda等价

C# Linq与SQL的Lambda等价,c#,sql,linq,entity-framework-4,C#,Sql,Linq,Entity Framework 4,我对实体框架比较陌生,我一直在尝试用Lambda编写一个包含简单连接的Linq语句。我有三张桌子:职员-职员角色-角色 我想要一名工作人员担任某个角色,并满足某个条件。在常规SQL中编写此代码非常简单: SELECT * FROM Staff s INNER JOIN StaffRole sr ON s.StaffId = sr.StaffId INNER JOIN Role r ON sr.RoleId = r.RoleId WHERE r.Description = 'Specialise

我对实体框架比较陌生,我一直在尝试用Lambda编写一个包含简单连接的Linq语句。我有三张桌子:职员-职员角色-角色

我想要一名工作人员担任某个角色,并满足某个条件。在常规SQL中编写此代码非常简单:

SELECT *
FROM Staff s
INNER JOIN StaffRole sr ON s.StaffId = sr.StaffId
INNER JOIN Role r ON sr.RoleId = r.RoleId
WHERE r.Description = 'SpecialisedHealthManager'
AND s.PrimaryShm = 0
现在,写在Linq声明中并没有给我带来多少运气。我想应该是这样的:

var actingShm = db.Staff.Join(db.StaffRole,
                           inner => inner.StaffId,
                           outer => outer.Role,
                           (outer, inner) => new
                           {
                               StaffId = inner.StaffId,
                               FirstName = inner.Staff.FirstName,
                               Surname = inner.Staff.Surname,
                               SamAccountName = inner.Staff.SamAccountName,
                               RoleId = outer.Description
                           });
不用说,这不起作用。

试着这样使用它:

var list = from s in Staff
join sr in StaffRole on s.StaffId equals sr.StaffId
join r in Role on sr.RoleId equals r.RoleId
where r.Description == 'SpecialisedHealthManager' && s.PrimaryShm == 0
select new
{
   StaffId = s.StaffId,
   FirstName = s.Staff.FirstName,
   Surname = s.Staff.Surname, 
   SamAccountName = s.Staff.SamAccountName,
   RoleId = r.Description
});

如果您确实想使用方法语法LINQ执行此操作,请查看此处:

请看这里:


用于连接扩展方法语法。代码中显示的用法错误。

您应该设置关联,以便执行此操作

var actingShm = from s in db.Staff
                from r in s.Roles
                where r.Description == "SpecialisedHealthManager"
                select new
                       {
                           StaffId = s.StaffId,
                           FirstName = s.FirstName,
                           Surname = s.Surname,
                           SamAccountName = s.SamAccountName,
                           RoleId = r.Description
                       });

您使用的是实体框架还是Linq2SQL?

可能与的重复请查看[如何使用lambda表达式连接3个表][1][1]:[在谷歌搜索有关使用实体框架的多对多关系的教程。我不知道您是要先使用数据库,还是先使用代码。