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

时间:2012-04-11 15:31:27

标签: c# sql linq

我有交易对象列表,并希望根据用户当前所处的视图按特定条件对其进行排序。

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

如果该列为空且仍然将它们附加到结果集,我如何修改查询以使其忽略条件(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为null的记录附加到结果集。

1 个答案:

答案 0 :(得分:5)

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