我提取了每个已完成X个表单的候选人列表。在启动报告时,报告管理员可以选择要报告的特定表单,或将该字段留空以获取所有表单。
以下是我的代码示例:
var candidates = from candidate in BPData.Candidates
join programGroup in BPData.ProgramGroups on candidate.GroupID equals programGroup.GroupID
where candidate.GroupID == programGroupID
from u in BPData.Users.Where(u => u.UserID == candidate.UserID).DefaultIfEmpty()
let formEntries = from formReport in BPData.FormReports
where formReport.CandidateID == candidate.CandidateID
where (from form in forms
select form.FormID).Contains(formReport.FormID)
join actionFormEntry in BPData.ActionFormEntries on formReport.ReportKey equals actionFormEntry.ValidationKey
orderby formReport.FormID
select new FormEntryViewModel
{
... removed for brevity
}
select new CandidateFormEntriesViewModel
{
CandidateID = candidate.CandidateID,
CandidateName = candidate.Name,
FormEntries = (List<FormEntryViewModel>)formEntries
};
以下代码行:
where (from form in forms select form.FormID).Contains(formReport.FormID)
如果报表管理员选择要报告的特定表单,则效果很好。但是,如果他们将这个领域留空,那么这项工作就无法进行。它应该以各种形式回归,但显然不会因为我设定条件的方式而获胜。
我的问题:
是否有可能在where子句上做某种形式的条件来满足这个要求(注意 - 这只是我的粗略思考):
where (forms.Count() > 0) ? **keep the same code as my query above** : true
这种方法确实有效。如果forms.Count()== 0,它会提取所有表单,而当forms.Count()&gt;时,它只提取特定的表单。这是正确的方法吗?
答案 0 :(得分:1)
我会说使用逻辑或非三元,因为这是一个你不关心将结果合并到查询的其余部分的地方,那种情况是当条件linq变得复杂时。
where (forms.Count() == 0 || **keep the same code as my query above**)
答案 1 :(得分:0)
这个怎么样?
where (from form in forms select form.FormID).Count==0 or (from form in forms select form.FormID).Contains(formReport.FormID)