簡體   English   中英

SQL 到 LINQ 的內部連接轉換和不同表上的過濾器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM