繁体   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