C# Linq与SQL的Lambda等价
我对实体框架比较陌生,我一直在尝试用Lambda编写一个包含简单连接的Linq语句。我有三张桌子:职员-职员角色-角色 我想要一名工作人员担任某个角色,并满足某个条件。在常规SQL中编写此代码非常简单: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
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]:[在谷歌搜索有关使用实体框架的多对多关系的教程。我不知道您是要先使用数据库,还是先使用代码。