[英]SQL to LINQ conversion with inner join and where filters on different tables
以下查詢會是什么:
select (UserRoles.RoleID, UserRoles.UserID) from UserRoles
inner Join Roles on Roles.RolesID = UserRoles.RoleID
where Roles.RoleName = 'Seller' AND UserRoles.UserID =1
看起來像實體框架?
我試過這個:
var check = from a in UserRole
join b in Role
on a.RoleID equals b.RoleID
select new{RoleName ="seller"};
但這是錯誤的,有人可以指導我嗎?
查詢的逐字轉換(刪除SELECT
的父項后)
select UserRoles.RoleID, UserRoles.UserID
from UserRoles
inner Join Roles on Roles.RolesID = UserRoles.RoleID
where Roles.RoleName = 'Seller' AND UserRoles.UserID =1;
將是查詢語法中的以下內容,針對您的DbContext
稱為context
(我假設 DbSets 的默認復數命名約定:)
var result = from a in context.UserRoles
join b in context.Roles
on a.RoleID equals b.RoleID
where b.RoleName == "Seller" && a.UserId == 1
select new {b.RoleID, a.UserID};
我們加入表格並投影出您想要的兩列。
但是,如果您已在 EF 模型中定義了導航屬性UserRole.Role
,則不需要顯式加入,而且會更簡單(我已切換到 lambda 語法):
var result = context.UserRoles
.Where(ur => ur.UserID == 1 && ur.Role.Name == "Seller")
.Select(ur => new {ur.RoleID, ur.UserID});
同樣,將兩列投影到一個匿名類中。 如果完全省略最后的Select
語句,您將獲得完整的UserRole
實體實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.