我有一个事务对象列表,希望根据用户当前打开的视图按特定条件对它们进行排序。
我遇到的问题是,为了在where子句中添加条件,首先需要检查它是否为空,以防止出现空指针异常。这将导致筛选出列为空的记录(我希望将它们包括在列表的底部)。
如何修改查询,以便在该列为空时忽略条件(where和order by)并仍将其附加到结果集中?
这是一个示例查询:

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为空的记录要附加到结果集。

最佳答案

您只需修改OrderByThenBy子句:

.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子句。

08-26 23:41