C# 无法构造正确的查询WHERE子句-组合键、多个表、完整数据
我们有一个相当冗长的查询,无法让它“正确”工作。 查询和要求如下所示 如果这个问题的标题没有多大帮助,请道歉。我们不知道还能叫什么名字 当前代码:C# 无法构造正确的查询WHERE子句-组合键、多个表、完整数据,c#,model-view-controller,C#,Model View Controller,我们有一个相当冗长的查询,无法让它“正确”工作。 查询和要求如下所示 如果这个问题的标题没有多大帮助,请道歉。我们不知道还能叫什么名字 当前代码: from process in _db.Process join job in _db.Job on new { Company_ID = process.Company_ID, Job_ID = process.Job_ID } equals new { Company_ID = job.Company_ID, Job_ID = job.ID
from process in _db.Process
join job in _db.Job on new { Company_ID = process.Company_ID, Job_ID = process.Job_ID } equals new { Company_ID = job.Company_ID, Job_ID = job.ID } into j
from subjob in j.DefaultIfEmpty()
join pp in _db.Process on new { Company_ID = process.Company_ID, ParentProcess_ID = process.ParentProcess_ID } equals new { Company_ID = pp.Company_ID, ParentProcess_ID = pp.ID } into p
from subprocess in p.DefaultIfEmpty()
where process.Company_ID = Company_ID
&& process.IsActive == true
// issue is with the following 2 lines of code
//&& (j == null ? true : subjob.IsActive == true)
///&& (p == null ? true : subprocess.IsActive == true)
select new ProcessIndexView { ID = process.ID, DescShort = process.DescShort, Job_ID = process.Job_ID, ParentProcess_ID = process.ParentProcess_ID, JobValue = (subjob == null ? "(no parent Job for this Process)" : subjob.DescShort), ParentProcessValue = (subprocess == null ? "(no parent Process for this Process)" : subprocess.DescShort ) }).ToList();
查询要求:
感谢您的帮助。请提前感谢。
j
和p
由于LINQ的实现方式,永远不会为null
。它们可能为空,但不会为null
如果要指示如果j
和be为非空或对应的布尔值为活动状态,则应包括行,则需要指示:
你真的应该重新格式化这些代码,这样你就不会有这么多的水平滚动。这让阅读成为一场噩梦。对于@Servy,感谢你的快速响应。我们想要的不是答案中的“非空”,而是“。。。为空,或者相应的布尔值处于活动状态“。当
j
或p
为空时,记录正常。所以我们想要j.Empty
或类似的,否则.IsActive。什么是.Empty
部分?@如果没有任何项目,则集合为空。已经有一种方法可以查看集合是否有任何项,您只需调用它,并对其进行否定,然后您就完成了,您知道集合是空的。哦,n00b误读了您的答案!这太完美了-!j、 Any()
和!p、 Any()
,注意代码>表示“否定它”。经过测试,效果良好。太好了-谢谢你@Servy。
where process.Company_ID == Company_ID //note this probably shouldn't be assignment
&& process.IsActive
&& (!j.Any() || subjob.IsActive)
&& (!p.Any() || subprocess.IsActive)