c# - 如何在 LINQ 和 C# 中使用 LEFT JOIN、GROUP BY 和 SUM
问题描述
我有 4 个表(Group、Student、Mark、StudentFile,并且想在 C# 中使用 LINQ 编写我的 SQL 查询。
这是我的查询
SELECT
S.Id,
S.FirstName,
S.LastName,
S.MiddleName,
SUM(M.CountOfPasses) CountOfPasses,
(SELECT SUM(CountOfPassesWithARespectful) FROM StudentFile WHERE StudentId = S.Id) WithARespectful
FROM Student S
LEFT JOIN Mark M ON S.Id = M.StudentId
GROUP BY S.Id, S.FirstName, S.LastName, S.MiddleName
我已经尝试过这样的事情:
var students = (from G in context.Group
let v = G.Id
from S in context.Student.Where(x => v == x.GroupId)
from F in context.StudentFile.Where(x => x.StudentId == S.Id).DefaultIfEmpty()
from M in context.Mark.Where(x => x.StudentId == S.Id).DefaultIfEmpty()
group new
{
F.CountOfPassesWithArespectful,
M.CountOfPasses,
S.Id
}
by new
{
S.Id,
S.FirstName,
S.LastName,
S.MiddleName,
S.StartCourse,
G.Name,
S.Alphagroup
} into GSF
select new DTOStudent
{
Id = GSF.Key.Id,
FirstName = GSF.Key.FirstName,
LastName = GSF.Key.LastName,
MiddleName = GSF.Key.MiddleName,
CountOfPasses = (int)GSF.Sum(p=>p.CountOfPasses),
WithRespectful = (int)GSF.Sum(x => x.CountOfPassesWithArespectful),
WithOutRespectful = (int)GSF.Sum(x => x.CountOfPasses) - (int)GSF.Sum(x => x.CountOfPassesWithArespectful),
Course = ClassMethods.GetAgeFromDates((DateTime)GSF.Key.StartCourse).ToString() +
ClassMethods.GetShortGroupName(GSF.Key.Name) + GSF.Key.Alphagroup.ToUpper()
}).Distinct().ToList();
解决方案
推荐阅读
- angular - 类型“用户 []”上不存在属性“角色”
- python - 来自带有分类数据和自定义“箱”的熊猫数据框列的直方图/值计数
- arrays - Powershell - 加入嵌套的字符串数组
- scala - Squeryl - 无法映射 - 在带有子查询的左外连接上
- c++ - 为什么我的代码与 cout 有问题<
代码中有问题
main
。cout<<num0-num1;
当我单独或单独尝试时cout<<num0+num1;
,它们工作得很好,但是当我一起做时,代码只是停止打印其中一个,其余代码停止。我的意思是:如果我把主要写成:java - 如何在Java中使用正则表达式从原始字符串中删除某些字符串
- flutter - Flutter Web - 带有 ListView 的滚动条 - _positions.isNotEmpty“滚动控制器未附加到任何滚动视图
- validation - 在验证期间添加参数 - Lighthouse
- python - Discord py - 覆盖不影响频道的权限
- php - 使用 php 将数组传递给 wsdl 文件无法正常工作