【问题标题】:Return "NOT NULL" in a ternary where I need to say == NOT NULL?在我需要说 == NOT NULL 的三元组中返回“NOT NULL”?
【发布时间】:2015-02-06 00:07:03
【问题描述】:

鉴于此代码:

            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的第一行:

如果 shift 中有东西,则返回 shift.Code 否则,返回“Something”,其计算结果为 x.Shift == NOT NULL(或者更清楚地说,它计算结果为 x.shift != null

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

【问题讨论】:

    标签: c# lambda entity-framework-4


    【解决方案1】:

    最易读的替代方法,将其扩展为一堆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();
    

    【讨论】:

    • 天哪!我知道你锁链,但不是那样的。这绝对令人难以置信!妈妈试试这个,让你知道它是如何工作的!
    • @MetalPhoenix 请记住,IQueryable 代表“要执行的查询”,而不是这样的结果。假设如何制作 IQueryable 的 [语义上] 等效的结束操作/树在很大程度上是无关紧要的(EF 可以使用的可查询对象的所有限制等)。查看应用的可查询的实际 SQL(即在 ToList 中)以了解最终发生的情况。
    • 是的,这似乎是我所需要的,只需稍作逻辑修改......如果我们总是假设它有一个值(它会),那么处理 productNumber 会更容易。总体而言,这是一个比我试图完成的更好的解决方案!很容易忘记它不是实际的结果或动作,而是“要做”,因为它被 EF 分隔。谢谢提醒。
    猜你喜欢
    • 2010-09-19
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-26
    • 2013-10-19
    • 2010-11-12
    相关资源
    最近更新 更多