我有2个表格,其中包含以下字段:
人
ID,LastName,FirstName
分配
PersonID,AssignmentDate,OtherField
我们说表数据如下所示:
人
- 1,Smith,John
- 2,艾伦,詹姆斯
- 3,Stone,Emma
作业
1,12/1/2016,Blue
1,1 / 1/2017,Green
1,1 / 1/201,红色
2,5 / 5/2015,黄色
我正在制作一份报告,逻辑说明......
此外,按PersonID分组,然后是#34;偶数" AssignedYear。包括所有人员和所有作业。 (我不确定我是否应该使用Group By或Distinct。在此部分感到困惑。)
我需要它根据示例表输出这些结果:
1,2016
2018年
2,2014
3, null (因为personID = 3存在,但没有作业,我们仍然希望合并此人)
你会怎么做?我已经走到了这一步,但卡住了。 :(
var t = from p in tblPersons
join a in tblAssignments
on p.ID equals a.PersonID into fml
from x in fml
select new AssignmentFilters
{
PersonID = x.PersonID,
Person= x.tblPersons.LastName + ", " + x.tblPersons.FirstName +
(string.IsNullOrEmpty(x.tblPersons.PreferredName) ? "" : " (" + x.tblPersons.PreferredName + ")") +
(string.IsNullOrEmpty(x.tblPersons.MiddleName) ? "" : " " + x.tblPersons.MiddleName) +
(string.IsNullOrEmpty(x.tblPersons.Suffix) ? "" : " " + x.tblPersons.Suffix),
AuditStartYear = x.DateAssigned == null ? 0 : (x.DateAssigned.Year % 2 == 0 ? x.DateAssigned.Year : x.DateAssigned.Year - 1)
};
任何帮助将不胜感激!在过去的几个小时里一直在研究这个问题,我只是感到沮丧/难倒,哈哈。谢谢!
答案 0 :(得分:0)
根据您提及的具体规则隔离每人的审核
var audits = from assignment in tblAssignments
select new
{
PersonId = assignment.PersonID,
Year = assignment.DateAssigned == null
? 0
: assignment.DateAssigned.Year % 2 == 0
? assignment.DateAssigned.Year
: assignment.DateAssigned.Year - 1
};
迭代人员并在不同的审核上留下外部联接
var results = from person in tblPersons
from audit in
(
from a in audits.Distinct()
where a.PersonId == person.ID
select a
).DefaultIfEmpty()
select new
{
Person = person,
Audit = audit,
};
这应该给你这样的东西,然后你可以进一步以你需要的任何形状投射结果