Return "NOT NULL" 在我需要说 == NOT NULL 的三元组中?

Return "NOT NULL" in a ternary where I need to say == NOT NULL?

鉴于此代码:

            dataSource = this.db.DailyProductionReportSummaries.Where(
                x => x.ShiftDate >= start && x.ShiftDate <= end &&
                x.Shift == (shift != null ? shift.Code : "SOMETHING ELSE") &&  //TODO: "SOMETHING ELSE" where it's not null
                x.LineNumber == (shift != null ? lineNumber : 0) && //TODO: 0 where it's not null
                x.ProductCode == (productNumber != 0 ? productNumber.ToString() : "SOMETHING ELSE") //TODO: "SOMETHING ELSE" where it's not null
                ).ToList();

我需要在每个标有 "TODO" 的三元组中说类似的东西(特别针对 //TODO 的第一行:

If shift has something in it, return shift.Code otherwise, return "Something" that will evaluate to x.Shift == NOT NULL (or more clearly that it evaluates to x.shift != null)

我只是坚持一个愿望,还是需要继续将其扩展为一堆 if 陈述? (我正在尝试将多个 if 语句压缩成更紧凑且适应更改配置的内容,而无需大量逻辑更改或重写...

最可读的替代方法将其扩展为一堆if语句。请记住,您不需要拼出每个备选方案,不需要一堆 if 嵌套,您可以通过重复调用 Where 简单地链接过滤器。

var query = this.db.DailyProductionReportSummaries.AsQueryable();

query = query.Where(x => x.ShiftDate >= start && x.ShiftDate <= end);

if (shift == null)
    query = query.Where(x => x.Shift != null
                          && x.LineNumber != null);
else
    query = query.Where(x => x.Shift == shift.Code
                          && x.LineNumber == lineNumber);

if (productNumber == 0)
    query = query.Where(x => x.ProductCode != null);
else
    query = query.Where(x => x.ProductCode == productNumber.ToString());

dataSource = query.ToList();