我之间有关系Users
and UsersProjects
. UserProjects.UserId
参考Users.UserId
我想找到位于的用户UserProjects
and UserProject
has UsreProjects.ProjectId == 4
。然后将其余的用户合并到该表中。
事实上我想改变 User 的一些属性UserProject = 4
.
在 MSSQL 中,只是为了测试我有以下查询
Select U.UserId
from Users U
Join UserProjects UP
On U.UserId = up.UserId
Where up.ProjectId = 4
Union
Select U.UserId From Users U
我不会更改任何属性。无论如何,结果它向我展示了应有的全部用户。
但现在使用相同的查询并更改属性会导致比我更多的用户。
var usrs = ((from users in context.Users
join userProj in context.UserProjects
on users.UserId equals userProj.UserId
where userProj.ProjectId == projectId
select new ProjectUsersDTO
{
UserName = users.Name,
Rate = users.RatePerHour,
UserId = users.UserId,
alreadyInProject = true
})
.Union(from users in context.Users
select new ProjectUsersDTO
{
UserName = users.Name,
Rate = users.RatePerHour,
UserId = users.UserId,
alreadyInProject = false
}))
.ToList();
return usrs;
当 UNION 不允许重复时会怎样?
提前致谢!
LINQ 联合与 SQL 联合
它们是等价的。
但现在使用相同的查询并更改属性会导致比我更多的用户。
It's 不一样询问。在第一个 (SQL) 查询中,您仅选择(包含)一个字段 (UserId
)而在第二个(LINQ)中,您包含几个字段,其中之一肯定是不同的。自从Union
使用所有包含的字段作为项目是否唯一的条件,第二个查询返回更多项目是正常的。
说了这么多,我们来看看具体问题如何解决。看来你不需要Union
根本不。通常你应该有一个导航属性,所以像这样的简单查询应该可以完成这项工作(假设导航属性被称为Projects
):
var query =
from user in context.Users
select new ProjectUsersDTO
{
UserName = user.Name,
Rate = user.RatePerHour,
UserId = user.UserId,
alreadyInProject = user.Projects.Any(userProj => userProj.ProjectId == projectId)
};
var result = query.ToList();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)