2012-04-11 35 views
4

私はトランザクションオブジェクトのリストを持っており、ユーザが現在表示されているビューに応じて特定の条件でそれらを注文したい。LINQでカラムがnullの場合、 'where'と 'order by'条件を無視する方法

問題は、where句に条件を追加するために、まずヌルポインタの例外を防ぐためにnullかどうかを確認する必要があることです。これにより、フィルタリングされている列nullのレコードが生成されます(リストの一番下にそれらを含めたい)。

クエリが変更され、その列がnullで結果セットに追加されたままの状態(場所と順序)が無視されるようにするにはどうすればよいですか?

これは、1つのサンプルクエリです:

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または賞は、結果セットに追加することがnullのレコードをしたいです。

+1

どうすれば結果セットの一部のみを注文できますか?あなたは2つの質問が必要だと思います。 –

答えて

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句を削除することができます。

+0

OrderByパラメーターがどのように機能するか説明できますか?生成されたSQLはどのように見えますか?私はそれがそのように使われているのを見たことはない。 –

+0

それは働いているようですが、条件によって最初の注文が何をしているのか説明できますか?あなたがそれをやったように、それは上にヌルの列を持つレコードを配置するように見えます。 – ljustin

+0

@SteveMallory:SQLがどのように見えるかはわかりませんが、チェックするだけです。 –

関連する問題