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

我有事务对象列表,并希望根据用户当前查看的视图按特定条件对它们进行排序。

我遇到的问题是,为了在where子句中添加条件,首先我需要检查它是否为null以防止空指针exception。 这会导致过滤掉列null的记录(我希望将它们包含在列表的底部)。

我如何修改查询,以便它忽略条件(where和order by),如果该列为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的记录附加到结果集。

您只需修改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子句。