gpt4 book ai didi

c# - LINQ 联盟与 SQL 联盟

转载 作者:行者123 更新时间:2023-11-30 20:38:19 27 4
gpt4 key购买 nike

我在 UsersUsersProjects 之间建立关系。 UserProjects.UserId 引用 Users.UserId

我想找到 UserProjects 中的用户,UserProjectUsreProjects.ProjectId == 4。然后将其余的用户联合到这个表。

事实上,我想更改 UserProject = 4 的 User 的一些属性。

在 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 Union vs SQL Union

它们是等价的。

But now using the same query with changing properties result more users than I ave.

这是不同查询。在第一个 (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();

关于c# - LINQ 联盟与 SQL 联盟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35296388/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com