以下列格式生成列表
本文关键字:列表 格式 | 更新日期: 2023-09-27 18:07:08
我有一个场景,我将从数据库接收头名称(用于创建文本文件)。列表将像
DeptId TeacherId StudentId testname testvalue
101 1 501 A 85
101 1 501 B 90
101 1 502 A 80
101 1 502 B 75
101 2 502 A 80
101 2 502 B 84
102 1 503 A 56
102 1 503 B 60
假设测试次数相同(A &B)输出应该像
DeptId TeacherId StudentId A B
101 1 501 85 90
101 1 502 80 75
101 2 502 80 84
102 1 503 56 60
这样就可以了
var results = from x in context.Tests
group x by new { x.DeptId, x.StudentId, x.TeacherId } into grp
select new
{
grp.Key.DeptId,
grp.Key.StudentId,
grp.Key.TeacherId,
A = grp.FirstOrDefault(x => x.TestName == "A")?.TestValue,
B = grp.FirstOrDefault(x => x.TestName == "B")?.TestValue
};
对于空条件运算符?.
,这需要c# 6,但您可以这样做
A = grp.Where(x => x.TestName == "A").Select(x => x.TestValue).FirstOrDefault();
您可能还想在from
之后过滤掉其他带有where
的测试,以避免结果a和B最终都是null
,如下所示
where x.TestName == "A" || x.TestName == "B"
当然,如果DeptId-StudentId-TeacherId组合在数据库中只有其中一个测试,则您仍然可以以A和B的空值结束。