一尘不染

如果LINQ中的列为空,如何忽略“ where”和“ order by”条件

sql

我有交易对象的列表,并希望根据当前用户的状态按特定条件对它们进行排序。

我的问题是,为了在where子句中添加条件,首先我需要检查它是否为null或防止null指针异常。这将导致筛选出具有null列的记录(我想将它们包括在列表的底部)。

如果该列为空,如何修改查询,以使其忽略条件(位置和顺序),并仍将其附加到结果集?

这是一个示例查询:

transactions = transactions
                    .Where(t => t.PurchaseRequisition != null && 
                    t.Award != null && t.PurchaseRequisition.RequisitionedBy != null)
                    .OrderBy(t => t.Award.ContractNumber).
                    ThenBy(t => ToSafeString(t.Award.ContractNumber)).
                    ThenBy(t => ToSafeString(t.PurchaseRequisition.RequisitionedBy.FullName));


public string ToSafeString(string s)
{
    return s ?? String.Empty;
}

//我想将PurchaseRequisition或Award为null的记录添加到结果集中。


阅读 219

收藏
2021-05-23

共1个答案

一尘不染

您只需要修改OrderByandThenBy子句:

.OrderBy(t => t.Award == null || t.Award.ContractNumber == null)
.ThenBy(t => t.Award == null ? "" : ToSafeString(t.Award.ContractNumber))
.ThenBy(t => t.PurchaseRequisition == null ? "" 
             : ToSafeString(t.PurchaseRequisition.RequisitionedBy.FullName));

现在,您可以完全删除该Where子句。

2021-05-23