5

トランザクションオブジェクトのリストがあり、ユーザーが現在オンになっているビューに応じて、特定の条件でそれらを並べ替えたいと思います。

私が抱えている問題は、where句に条件を追加するために、最初にそれがnullであるかどうかを確認して、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のレコードを結果セットに追加したい。

4

1 に答える 1

5

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これで、句を完全に削除できます。

于 2012-04-11T15:36:00.363 に答える