Linq多条款条件如果条件
我想写多个where子句和where子句Linq进一步包含内联如果条件Linq。Linq多条款条件如果条件
List<MeetingVM> students = (
from s in db.Meetings
where MeetingIsActive == null || s.IsActive == MeetingIsActive
where MeetingStat == null || MeetingStat == 5 ? (DateTime.UtcNow >= s.MeetingStartTime && DateTime.UtcNow <= s.MeetingStopTime) : s.Status== MeetingStat
where StartDate == null || (s.MeetingStartTime >= StartDate && s.MeetingStartTime <= EndDate)
where s.Status!=4
orderby s.MeetingStartTime ascending
select new MeetingVM
{
MeetingStartTime = s.MeetingStartTime,
MeetingStopTime = s.MeetingStopTime,
Alias = s.Alias,
MeetingSubject = s.MeetingSubject,
UserId = s.UserId,
Status=s.Status
}).ToList();
此如果条件执行(DateTime.UtcNow> = s.MeetingStartTime & & DateTime.UtcNow < = s.MeetingStopTime)即使MeetingStat == NULL。
where MeetingStat == null || MeetingStat==5 ? (DateTime.UtcNow >= s.MeetingStartTime && DateTime.UtcNow <= s.MeetingStopTime) : s.Status== MeetingStat
如果我删除这个..
MeetingStat==5 ? (DateTime.UtcNow >= s.MeetingStartTime && DateTime.UtcNow <= s.MeetingStopTime) :
它的工作原理。 但我想写这个来检查
if (MeetingStat==5)
(DateTime.UtcNow >= s.MeetingStartTime && DateTime.UtcNow <= s.MeetingStopTime)
else
s.Status== MeetingStat.
我在做什么错?
首先,让我们在某种程度上格式的代码,这不是愚蠢难以阅读:
List<MeetingVM> students = (
from s in db.Meetings
where MeetingIsActive == null || s.IsActive == MeetingIsActive
where MeetingStat == null || MeetingStat == 5 ? (DateTime.UtcNow >= s.MeetingStartTime && DateTime.UtcNow <= s.MeetingStopTime) : s.Status== MeetingStat
where StartDate == null || (s.MeetingStartTime >= StartDate && s.MeetingStartTime <= EndDate)
where s.Status!=4
orderby s.MeetingStartTime ascending
select new MeetingVM
{
MeetingStartTime = s.MeetingStartTime,
MeetingStopTime = s.MeetingStopTime,
Alias = s.Alias,
MeetingSubject = s.MeetingSubject,
UserId = s.UserId,
Status=s.Status
}).ToList();
这有点好一点。现在
,我不是这个100%肯定,所以有人谁知道更好的可随时纠正我,但根据C# Operator Precedence时,OR(“||”)操作符比条件的优先级高( “?”)操作,所以这行:
where MeetingStat == null || MeetingStat == 5 ? ...
基本上得到评价是这样的:
where (MeetingStat == null || MeetingStat == 5) ? ...
如果MeetingStat
等于属实,这将使得表达式计算的第一个分支三元操作。从你的问题你的描述来看,这是不是你想要的,所以我建议周围的括号中的三元操作,让您的意图明显:
where MeetingStat == null || (MeetingStat == 5 ? ...)
哇。我甚至不认为括号可以做出这样的改变。它现在工作正常。非常感谢。 –
我认为这个问题是DateTime.UtcNow
更好您存储在一个变量河畔它的值,然后使用LINQ一样是这样的:
DateTime UtcTime = DateTime.UtcNow;
// and change the condition like this;
.Where MeetingStat != null && MeetingStat==5 ? (UtcTime >= s.MeetingStartTime && UtcTime <= s.MeetingStopTime) : s.Status== MeetingStat
它正在发生的事情,是因为里面谓词Where子句不得到转换为SQL,如果您使用的是像这意味着您的代码将作品因为UtcTime
预期是现在转换
仍然在MeetingStat为空时执行(UtcTime> = s.MeetingStartTime && UtcTime
你究竟想要什么?如果你不想执行休息,如果'MeetingStat = null'意味着用'&&' –
代替'||'如果有null,那么它不应该检查||。 –
“不工作”是不是我们可以帮你的条件。请发布错误消息。 – nvoigt
编辑我的问题。 –
即使MeetingStat == null,条件执行此操作(DateTime.UtcNow> = s.MeetingStartTime && DateTime.UtcNow