var JobList = new UpdateJobDetails();
JobList.jobDetails = (from b in Result
where (b.JobStatus !=4 && b.ActionStatus != 0) || (b.JobStatus !=5 && b.ActionStatus != 0)
select b).ToList();
如果我这样做,则此查询将所有条件视为单独的实体。
所以我做的是:
List<Jobs> Job = new List<Jobs>();
foreach (var item in Result)
{
if ((item.JobStatus == 4 && item.ActionStatus == 0) || (item.JobStatus == 5 && item.ActionStatus == 0))
{
Job.Add(item);
}
}
var X = (from b in Result
where !Job.Any(x => x.ID == b.ID)
select b).ToList();
JobList.jobDetails = X;
所以在这里我只是想知道我可以通过LINQ Query实现这一点。正如我所经历的Linq Query不接受多个条件的组合。 如果我错了,请纠正我。 TIA
答案 0 :(得分:2)
请考虑以下事项:
(a != 4 && b != 0) || (a != 5 && b != 0)
不同
a
与4不同,b
与0不同, OR
a
与5不同,b
与0
通过评论添加了步骤
这相当于:
b != 0 && (a != 4 || a != 5)
不同
b
与0 AND
不同a
与4不同,或a
与5
这相当于:
b != 0
由于:
a
不能等于4和5
现在,只需将a
替换为b.JobStatus
,将b
替换为b.ActionStatus
,您就会明白为什么您的第一个查询无法返回您的预期
是的,你错了,Linq Query接受多种条件的组合。
你只需要写好条件。
这个(foreach
循环中的条件):
(item.JobStatus == 4 && item.ActionStatus == 0) || (item.JobStatus == 5 && item.ActionStatus == 0)
不 相反(初始查询中的条件):
(b.JobStatus !=4 && b.ActionStatus != 0) || (b.JobStatus !=5 && b.ActionStatus != 0)
如果你想要相反:
(a == 4 && b == 0) || (a == 5 && b == 0) // 1)
可以简化为:
b == 0 && (a == 4 || a == 5) // 2)
使用:
!((a == 4 && b == 0) || (a == 5 && b == 0)) // 1) basic negation
或:
(a != 4 || b != 0) && (a != 5 || b != 0) // 1) ditributed negation
甚至:
!(b == 0 && (a == 4 || a == 5)) // 2) basic negation
或:
b != 0 || (a != 4 && a != 5) // 2) distributed negation
上述四个条件相同。
答案 1 :(得分:0)
尝试以下linq查询,
var JobList = new UpdateJobDetails();
JobList.jobDetails = (from b in Result where (b.ActionStatus != 0 && b.JobStatus !=4 && b.JobStatus !=5) select b).ToList();
答案 2 :(得分:0)
你编写查询的方式对我来说似乎不对。你可以像
那样重写var JobList = new UpdateJobDetails();
JobList.jobDetails = from b in Result
where ((b.JobStatus !=4 && b.ActionStatus != 0) || (b.JobStatus !=5 && b.ActionStatus != 0))
select b;
(或)使用多个Where
条件
JobList.jobDetails = Result
.Where(b => b.JobStatus !=4 && b.ActionStatus != 0)
.Where(c => c.JobStatus !=5 && c.ActionStatus != 0)
.Select(b => b);
答案 3 :(得分:0)