[英]Linq with Lambda equivalent of SQL
我對實體框架比較陌生,我一直在嘗試用Lambda寫一個包含簡單連接的Linq語句。 我有三張桌子:員工 - StaffRole - 角色。
我想要一個滿足某種條件的特定角色的工作人員。 在常規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來做這個,請看這里:
另見:
http://msdn.microsoft.com/pl-pl/library/bb534675(v=vs.110).aspx
用於Join擴展方法語法。 代碼中顯示的用法是錯誤的。
你應該設置你的關聯,這樣你才能做到這一點......
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
});
您使用的是Entity Framework還是Linq2SQL?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.