gpt4 book ai didi

c# - 将简单的 Left Outer Join 和 group by SQL 语句转换为 Linq

转载 作者:太空宇宙 更新时间:2023-11-03 23:28:32 24 4
gpt4 key购买 nike

2 个表: 用户和警报

表:用户 用户ID(整数), 全名(varchar)

表:报警 分配给(整数), 已解决( bool )

查询:

SELECT u.Fullname, COUNT(resolved) as Assigned, SUM(CONVERT(int,Resolved)) as Resolved, COUNT(resolved) -  SUM(CONVERT(int,Resolved)) as Unresolved
FROM Alarm i LEFT OUTER JOIN Users u on i.AssignedTo = u.UserID
GROUP BY u.Fullname

结果:

Fullname  Assigned  Resolved  Unresolved
User1 204 4 200
User2 39 9 30
User3 235 200 35
User4 1 0 1
User5 469 69 400

我这辈子都想不出如何将其变成 Linq 查询。我在使用分组功能时遇到问题。我看了无数的例子,但没有一个是我的 Left Outer join 与分组的组合,或者它们太复杂了,我不知道如何让它与我的一起工作。如有任何帮助,我们将不胜感激!!!

更新:我可能不清楚我在寻找什么。我正在寻找按 AssignedTo 列分组的警报,它是一个用户标识...除此之外,我想用位于用户表中的 FullName 替换该用户标识。有人发布并删除了一些接近的东西,除了它给了我用户表中的所有用户,这不是我要找的..

更新 2:在下面查看我的回答

最佳答案

假设您有以下模型:

这是警报的模型:

public class Alarm
{
public int id { get; set; }

public int AssignedTo { get; set; }

[ForeignKey("AssignedTo")]
public virtual User User { get; set; }

public bool Resolved { get; set; }
}

这是用户模型:

public class User
{
public int UserID { get; set; }

public string FullName { get; set; }

public virtual ICollection<Alarm> Alarms { get; set; }

public User()
{
Alarms = new HashSet<Alarm>();
}
}

这是将保存每个用户的警报统计信息的模型:

public class UserStatistics
{
public string FullName { get; set; }
public int Assigned { get; set; }
public int Resolved { get; set; }
public int Unresolved { get; set; }
}

然后您可以执行以下操作:

var query = context.Users.Select(
user =>
new UserStatistics
{
FullName = user.FullName,
Assigned = user.Alarms.Count,
Resolved = user.Alarms.Count(alarm => alarm.Resolved),
Unresolved = user.Alarms.Count(alarm => !alarm.Resolved)
});


var result = query.ToList();

顺便说一句,你也可以修改查询并删除Unresolved = user.Alarms.Count(alarm => !alarm.Resolved),然后使Unresolved 像这样计算属性:

public class UserStatistics
{
public string FullName { get; set; }
public int Assigned { get; set; }
public int Resolved { get; set; }
public int Unresolved
{
get { return Assigned - Resolved; }
}
}

这将使生成的 SQL 查询更简单。

关于c# - 将简单的 Left Outer Join 和 group by SQL 语句转换为 Linq,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33047175/

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